【问题标题】:Changing where a function's behavior is described is causing an error?更改描述函数行为的位置会导致错误吗?
【发布时间】:2013-11-11 23:40:40
【问题描述】:

我有以下类声明(我已尝试删除尽可能多的多余代码):

class List {
    public:
        struct Node {
            int value;
        };
        Node * findNode(unsigned int) {
            return new Node;
        }
};

这没有错误。但是,一旦我在类之外定义了函数“findNode”,就会出现错误;这是代码:

class List {
    public:
        struct Node {
            int value;
        };
        Node * findNode(unsigned int);
};

Node * List::findNode(unsigned int index) {
    return new Node;
}

现在,在运行代码时,我收到一条错误消息“LinkedList.cpp:9:1: error: 'Node' does not name a type”。

如果能帮我确定问题,我将不胜感激。

【问题讨论】:

  • 另外,如果这是一个头文件,你需要在类外的定义上使用inline。否则,一旦两个源文件包含相同的标头,您就会收到链接错误。

标签: c++ function debugging object


【解决方案1】:

直到编译器遇到List::,它才知道你所说的NodeList 的成员。将定义更改为:

List::Node * List::findNode(unsigned int index) {
    return new Node;
}

函数内部的“裸”Node 很好,因为到那时编译器知道该函数是 List 的成员。

【讨论】:

  • @PawełStawarz,不,请阅读答案的最后一句:“函数内部的“裸”Node 很好,因为到那时编译器知道该函数是列表。” 即在List::findNode 名称之后在List 的范围内查找。
猜你喜欢
  • 1970-01-01
  • 2020-10-22
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多