【发布时间】:2020-07-17 06:08:00
【问题描述】:
我有一个Request_manager.h 文件,在Request_manager 中将对象Tickets_Queue 声明为静态,这是一个来自自身的嵌套类。
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;
};
要初始化它,在Request_manager.cpp 我写:
int Request_manager::m_connected(0);
Request_manager::Tickets_Queue Request_manager::ticket_queue();
m_connected 的初始化有效,但对于 ticket_queue 它说:
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();
【问题讨论】:
-
你为什么用
pthread_mutex_t而不是std::mutex? -
请省略括号
()。您想调用默认构造函数,但编译器将其读取为 函数声明。 (我经常看到的一个常见陷阱。);-) 请尝试Request_manager::Tickets_Queue Request_manager::ticket_queue;。Request_manager::Tickets_Queue Request_manager::ticket_queue{};应该也可以。
标签: c++ inner-classes