【问题标题】:Declare methods with pointer outside class in C++ [closed]在 C++ 中使用类外部指针声明方法 [关闭]
【发布时间】:2021-07-08 10:46:05
【问题描述】:

我想在类外部声明以下代码的方法,但只要该方法是指向私有成员变量的指针,就会出现以下错误: "没有函数模板实例 "std::next" 与所需的类型 C/C++(386) 匹配。

class Node
{

private:
    int data;
    Node *next;

public:
    Node() {}

    int GetData() { return data; }
    Node *GetNext() { return next; }

    void SetData(int aData) { data = aData; }
    void SetNext(Node *aNext) { next = aNext; }
};

// outside try class declaration of
int Node::GetData() { return data; }
Node Node::*GetNext() { return next; } // here is the error!!

你会帮我吗?

【问题讨论】:

  • 你应该这样做Node* Node::getNext()

标签: c++ class pointers


【解决方案1】:

这是错误的

Node Node::*GetNext() { return next; }

这是对的

Node* Node::GetNext() { return next; }

函数的名称是Node::GetNext,而不是GetNext

【讨论】:

  • 如何在类设置器中声明以下内容? . . void SetNext(Node *aNext) { next = aNext; }?
  • @zumuha 请每个问题问一个问题。
  • 顺便说一句。这是将星号放在类型而不是名称上的一个论点......
  • @StefanRiedel 有人可能会说这个名字是Node::getNext
  • @AdityaSinghRathore 我不会不同意,但重点仍然存在:如果您将星号放在类型上(因为它是返回类型的一部分),就不会出现这种混淆。但正如我所说,这只是我对这个话题的看法。
【解决方案2】:

必须在返回类型后面加上星号,因为返回类型是指向 Node 对象的指针

像这样:

Node *Node::GetNext() { return next; }

【讨论】:

    【解决方案3】:

    当你写Node *GetNext();时,这意味着方法名是GetNext,返回类型是Node *。将星号放在方法名称附近还是远离它都没有关系。

    在类之外,您需要方法的完全限定名称,即Node::GetNext,返回类型为Node *。所以它看起来像Node *Node::GetNext();Node* Node::GetNext();,具体取决于您放置星号的风格。

    【讨论】:

    • 谢谢@debashish.ghosh。
    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 2021-06-15
    • 2017-04-02
    • 1970-01-01
    • 2023-04-09
    • 2018-02-27
    • 2016-11-15
    • 2011-01-17
    相关资源
    最近更新 更多