【问题标题】:C++ Nested class is producing undefined references to outer classC++ 嵌套类正在产生对外部类的未定义引用
【发布时间】:2012-06-28 13:52:31
【问题描述】:

我已经阅读了关于同样问题的其他线程,但我仍然不知道为什么会出现以下错误:undefinded reference to 并列出了外部类中的每个方法。

class ClientConnection
{

public:

   class Connector

   {

   public:

         Connector(ClientConnection&);
         ~Connector();

        void Connect(unsigned int usleep);
        void Stop();
        bool isConnected();

    private:

        void attempt();

        ClientConnection& m_client;
        unsigned int m_usleep;
        bool m_stopRequest;
        bool m_isBusy;
        boost::shared_ptr<boost::thread> m_thread;

  };

  Connector* Connector();

  bool connect();
  bool isConnected();

private:

 friend class Connector;
};

我引用了外部类。 Connector 方法更新一个 Connector 对象并将其传递给它自己的引用。但是在代码中我得到undefined reference to ClientConnection::connectundefined reference to ClientConnection::isConnected的任何地方。

我完全被卡住了。

另外 - 当我使用 Connector() 新建一个对象时,ClientConnection::Connector* connector = client.Connector(); 其中客户端是 ClientConnection 的实体对象,我得到 invalid use of non-static member function ‘ClientConnection::Connector* ClientConnection::Connector()’

【问题讨论】:

  • bool isConnected(); 在哪里实现?
  • 您应该发布 ClientConnection 的构造函数。

标签: c++ nested nested-class


【解决方案1】:

需要考虑的几点:

  1. Connector* Connector(); - 你想在这里做什么?如果您尝试声明指向连接器的指针,请执行Connector* ptr_connector; 或其他操作。你基本上是在调用一个构造函数,声明一个指针,并且没有给出一个变量名——这太疯狂了!

  2. 你是否真的实现了嵌套类中看到的函数,如果没有,那就是你的问题所在!另外,您是否为嵌套类正确实现了它们?如果您没有在类中内联实现它们,语法会有些不同。

  3. ClientConnection::Connector* connector = client.Connector(); - 这也不起作用。您在需要客户端连接对象的类中声明了一个显式构造函数。但是在这里,您尝试创建一个连接器而不传递任何客户端对象。您没有不带参数的连接器的构造函数。

【讨论】:

  • 评论 1/3:修复了它。这显然是 Connector 的默认构造函数名称,所以我将它重命名为 newConnector() 并且它现在可以工作了。顺便说一句,该函数执行new ClientConnection::Connector(*this)。一个问题? Connector() 是 Connector 类的构造函数,但它不在该类的范围内,它在 ClientConnection 的范围内。它不应该起作用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2017-05-26
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多