2012-06-28 78 views
1

我已閱讀關於這個同樣的問題,其他線程,但我仍然不知道爲什麼我收到以下錯誤:undefinded reference to並列出在外部類中的每個方法。C++嵌套類是生產未定義的引用外部類

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

我完全卡住了。

而且 - 當我用連接器()來新興起來的一個對象,ClientConnection::Connector* connector = client.Connector();其中客戶端是ClientConnection的實體對象,我得到invalid use of non-static member function ‘ClientConnection::Connector* ClientConnection::Connector()’

+0

哪裏是'布爾isConnected();'執行? –

+0

您應該發佈ClientConnection的構造函數。 – jlunavtgrad

回答

2

有幾件事情要考慮:

  1. Connector* Connector(); - 你想在這裏做什麼?如果你試圖聲明一個指向連接器的指針,請執行Connector* ptr_connector;或其他。你基本上調用一個構造函數,聲明一個指針,並且不給變量名 - 這太瘋狂了!

  2. 你真的實現的功能是在嵌套類看,如果不是這就是你的問題!另外,你是否正確地爲嵌套類實現它們?如果你不在類中實現它們,語法有點不同。這個也行不通。您在您的類中聲明瞭需要客戶端連接對象的顯式構造函數。但是在這裏,您正在嘗試創建一個連接器而不傳遞任何客戶端對象。連接器沒有參數的構造函數。

+0

評論1/3:修正了它。這顯然對於連接器的默認構造函數的名稱,以便我把它改名爲newConnector(),它現在的作品。順便說一下,該函數執行'新的ClientConnection :: Connector(* this)'。有一個問題呢?該連接器()是連接器類的構造函數,但它不是在該類的範圍,它是在ClientConnection的範圍。它不應該有效嗎? – jiveturkey