【问题标题】:C++ return a pointer to a classC++ 返回一个指向类的指针
【发布时间】:2013-05-26 13:45:41
【问题描述】:

我有课。

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

我的班级是这样的:

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 &): Overloaded member function not found in clsNode.”

谁能告诉我哪里出错了? 谢谢!

【问题讨论】:

  • 类中的签名带有 const 参数,您的实现没有。

标签: c++ class pointers


【解决方案1】:

我想你的意思是:

return m_Daughters[0];
//    ^

因为m_Daughters[0] 属于clsNode* 类型,而*m_Daughters[0] 属于clsNode 类型,这将与返回类型不匹配。

你的函数签名在定义和实现上也不同:

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

【讨论】:

  • 谢谢。我希望能够归还其中一个 m_Daughters。我不想编辑它,我只需要阅读它。我希望我能解释清楚。你认为我存储和检索它的方式是好的还是你会用不同的方式来做?
  • @user2421725,这真的取决于这些指针的实际含义。为什么不能直接将它们存储为clsNode?为什么需要动态内存分配?
【解决方案2】:

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

clsNode *getNextNode(const udtCharVec &u);

这意味着函数通过引用 const 来获取它的参数,而当你定义函数时你有这个

clsNode *clsNode::getNextNode(udtCharVec &u)

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

第二个问题在return语句中:

return *m_Daughters[0];

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

return m_Daughters[0];

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 2011-08-02
      • 2022-06-15
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      相关资源
      最近更新 更多