我上课了。
我需要创建一个返回指向该类成员的指针的函数。
我的班级看起来像这样:
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中找不到重载的成员函数。”
有人可以告诉我哪里弄错了吗? 谢谢!
答案 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”。编译器告诉你,它无法找到你在底部实现的声明