2013-05-26 247 views
1

我有一個類。C++返回指向類的指針

我需要創建一個函數,該函數返回一個指向此類的成員的指針。

我的類看起來是這樣的:

class clsNode 
{ 
private: 
    wstring m_grapheme; 
    vector <clsNode*> m_Daughters; 
public: 
    clsNode *getNextNode(const udtCharVec &u); 
}; 

我試過如下:

clsNode *clsNode::getNextNode(udtCharVec &u) 
{ 

    if (u.Grapheme == m_grapheme) 
    { 
     return *m_Daughters[0]; 
    } 
    else 
    { 
     return *m_Daughters[1]; 
    } 
} 

編譯器告訴我:「錯誤c2511:clsNode:getNextNode(udtCharVec &):重載成員函數未找到在clsNode中。「

有人可以告訴我我犯了什麼錯誤嗎? 謝謝!

+3

在類中的簽名是帶有const參數的,您的實現沒有。 – EGOrecords

回答

4

我想你的意思是:

return m_Daughters[0]; 
// ^

因爲m_Daughters[0]clsNode*型和*m_Daughters[0]clsNode型這將不匹配返回類型的。

而且你的函數簽名的定義不同,執行:

clsNode *getNextNode(const udtCharVec &u) 
//     ^^^^^ 
clsNode *clsNode::getNextNode(udtCharVec &u) 
+0

謝謝。我想能夠返回其中一個m_Daughters。我不想編輯它,我只需要閱讀它。我希望我能解釋得很好。你認爲我的存儲和檢索方式可以嗎?或者你會以不同的方式做? – user2421725

+0

@ user2421725,它確實取決於這些指針的實際含義。爲什麼不能直接將它們存儲爲'clsNode'?你爲什麼需要動態內存分配? – Shoe

1

類聲明的方法簽名是: clsNode * getNextNode(常量udtCharVec & U);

但下面的實現是: clsNode * clsNode :: getNextNode(udtCharVec & U)

注意在聲明中 「常量」。編譯器告訴你它找不到你在底部實現的聲明

2

你在這裏有幾個錯誤。首先,你必須聲明

clsNode *getNextNode(const udtCharVec &u); 

這意味着該功能通過引用帶有其參數爲const,而當你定義的函數,你有這個

clsNode *clsNode::getNextNode(udtCharVec &u) 

的簽名是不同的(注意缺乏常量的在第二個)。

第二個問題是在return語句:

return *m_Daughters[0]; 

類型的返回值是一個引用,而不是指針(*有取消引用您從向量得到的指針)。要解決此問題,請執行以下操作:

return m_Daughters[0];