C++ 更改函数的位置';的行为是否导致错误?

C++ 更改函数的位置';的行为是否导致错误?,c++,function,debugging,object,C++,Function,Debugging,Object,我有以下类声明(我已尝试删除尽可能多的多余代码): 这没有错误。然而,一旦我在类之外定义函数“findNode”,我就会得到一个错误;代码如下: class List { public: struct Node { int value; }; Node * findNode(unsigned int); }; Node * List::findNode(unsigned int index) { retur

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

这没有错误。然而,一旦我在类之外定义函数“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'没有命名类型”


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

直到编译器遇到
列表::
它不知道您所说的
节点是
列表的成员。将定义更改为:

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

函数内部的“裸”
节点是可以的,因为此时编译器知道该函数是列表的成员。

直到编译器遇到
列表::
它不知道您所说的
节点是
列表的成员。将定义更改为:

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

函数内部的“裸”
节点
没有问题,因为此时编译器知道该函数是列表的成员。

如果是头文件,则需要对类外的定义使用
内联
。或者,当两个源文件包含相同的头文件时,就会出现链接错误。如果是头文件,则需要在类外的定义上使用
inline
。或者,当两个源文件包含相同的头文件时,就会出现链接错误。@PawełStawarz,否,请阅读答案的最后一句:“函数中的“裸”
节点
,因为此时编译器知道该函数是列表的成员。”也就是说,在
List::findNode
名称在
List
@PawełStawarz范围内查找之后,不,阅读答案的最后一句话:“函数中的“裸”
节点
没有问题,因为此时编译器知道该函数是List的成员。”即在
List::findNode
之后,在
List
的范围内查找名称。