【问题标题】:Static object of nested class [duplicate]嵌套类的静态对象[重复]
【发布时间】: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


【解决方案1】:

你正在调用一个函数。

是的。我的错。正如@john 所说,它是原型设计一个函数。

你必须声明类型和变量:

Request_manager::Tickets_Queue Request_manager::ticket_queue;

【讨论】:

  • 不调用函数,原型化函数。
  • @john 是的,已更正回复。谢谢约翰。
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
相关资源
最近更新 更多