1

我有一堂课。

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

我的课看起来像这样:

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 中找不到重载的成员函数。”

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

4

3 回答 3

4

我想你的意思是:

return m_Daughters[0];
//    ^

因为m_Daughters[0]是类型clsNode*,并且*m_Daughters[0]clsNode与返回类型不匹配的类型。

此外,您的函数签名在定义和实现方面也不同:

clsNode *getNextNode(const udtCharVec &u)
//                   ^^^^^
clsNode *clsNode::getNextNode(udtCharVec &u)
于 2013-05-26T13:49:16.607 回答
2

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

clsNode *getNextNode(const udtCharVec &u);

这意味着该函数通过引用 const 来获取其参数,而当您定义该函数时,您有这个

clsNode *clsNode::getNextNode(udtCharVec &u)

签名是不同的(注意第二个中缺少 const )。

第二个问题是在 return 语句中:

return *m_Daughters[0];

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

return m_Daughters[0];
于 2013-05-26T13:51:59.810 回答
1

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

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

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

于 2013-05-26T13:50:27.797 回答