0

I have a Request_manager.h file declaring an object Tickets_Queue as static in Request_manager, which is a nested class from itself.

class Request_manager {
public:
    class Tickets_Queue{
    private:
        pthread_mutex_t m_mutex;

    public:
        Tickets_Queue(){};
        ~Tickets_Queue(){};
    };
    static Tickets_Queue ticket_queue;

private:
    static int m_connected;
};

To initialize it, in Request_manager.cpp I write:

int Request_manager::m_connected(0);
Request_manager::Tickets_Queue Request_manager::ticket_queue();

The initialization of m_connected works but for ticket_queue it says:

gcc.archive core/bin/gcc-5.4.0/debug/link-static/threading-multi/libcore.a
gcc.compile.c++ data_interfaces/bin/gcc-5.4.0/debug/link-static/threading-multi/Request_manager.o
data_interfaces/Request_manager.cpp:17:62: error: no ‘dataserver::Request_manager::Tickets_Queue dataserver::Request_manager::ticket_queue()’ member function declared in class ‘dataserver::Request_manager’
 Request_manager::Tickets_Queue Request_manager::ticket_queue();
Hector Esteban
  • 1,011
  • 1
  • 14
  • 29
  • Why are you using `pthread_mutex_t` instead of `std::mutex`? – Jorengarenar Jul 17 '20 at 06:11
  • 3
    Please, leave out the parentheses `()`. You want to call the default constructor but the compiler reads this as **function declaration**. (A common pitfall I saw often enough.) ;-) Please, try `Request_manager::Tickets_Queue Request_manager::ticket_queue;`. `Request_manager::Tickets_Queue Request_manager::ticket_queue{};` should work as well. – Scheff's Cat Jul 17 '20 at 06:11

1 Answers1

1

You are calling a function.

Yeah. My mistake. As @john says it is prototyping a function.

You have to declare the type and the variable:

Request_manager::Tickets_Queue Request_manager::ticket_queue;
Manuel
  • 2,526
  • 1
  • 13
  • 17