C ++返回一个指向类的指针

时间:2013-05-26 13:45:41

标签: c++ class pointers

我上课了。

我需要创建一个返回指向该类成员的指针的函数。

我的班级看起来像这样:

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&amp;):在clsNode中找不到重载的成员函数。”

有人可以告诉我哪里弄错了吗? 谢谢!

3 个答案:

答案 0 :(得分:4)

我认为你的意思是:

return m_Daughters[0];
//    ^

因为m_Daughters[0]的类型为clsNode**m_Daughters[0]的类型为clsNode,这将导致返回类型不匹配。

此外,您的功能签名在定义和实现方面也有所不同:

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

答案 1 :(得分:2)

你有几个错误。首先你有声明

clsNode *getNextNode(const udtCharVec &u);

表示该函数通过引用const来获取其参数,而当您定义该函数时,您将拥有此

clsNode *clsNode::getNextNode(udtCharVec &u)

签名不同(请注意第二个签名缺少const。)

第二个问题出在退货声明中:

return *m_Daughters[0];

返回值的类型是引用,而不是指针(*取消引用从向量中获取的指针)。要解决此问题,请执行以下操作:

return m_Daughters[0];

答案 2 :(得分:1)

类声明中的方法签名是:     clsNode * getNextNode(const udtCharVec&amp; u);

但是下面的实现是:     clsNode * clsNode :: getNextNode(udtCharVec&amp; u)

请注意声明中的“const”。编译器告诉你,它无法找到你在底部实现的声明