为什么在我们已经包含LinkedList.h之后需要LinkedList :: List * LinkedList :: getMiddleNode()?据我所知,它应该导入所有文件变量(即struct List)和声明。
这是头文件。
class LinkedList{
private:
struct List {
int num;
List* next;
};
List* head;
public:
...
...
List* getMiddleNode();
};
现在这里是CPP档案。
#include <iostream>
#include "LinkedList.h"
LinkedList::List* LinkedList::getMiddleNode() {
...
...
return node;
}
答案 0 :(得分:1)
为什么在我们已经包含LinkedList.h之后需要LinkedList :: List * LinkedList :: getMiddleNode()?
因为编译器需要知道您正在定义类LinkedList
的方法而不是独立函数。没有人会阻止你声明/定义独立函数以及这样的方法:
class LinkedList {
public:
LinkedList::List* LinkedList::getMiddleNode();
...
};
LinkedList::List* getMiddleNode();
你怎么告诉编译器哪一个是哪个?
答案 1 :(得分:0)
为什么
LinkedList::List* LinkedList::getMiddleNode()
之后需要 我们已经包含了 LinkedList.h ?据我所知,包括它应该 导入所有文件变量(即struct List)和声明。
除了可以将非成员函数与其他地方的声明分开;如果你有多个具有相同功能名称的可见类怎么办?你如何在课堂上单独定义其成员函数?所以,这是C ++在类定义之外定义成员函数的方法。引用(强调我的):
[class.mem/4]:如果成员函数的定义在词法之外是在其类之外 定义,成员函数名称应由其类限定 使用::运算符命名。 [注意:成员函数中使用的名称 定义(即在参数声明子句中包括 默认参数([dcl.fct.default])或在成员函数体中) 查找[basic.lookup]中描述的内容。 - 结束注释] [示例:
struct X { typedef int T; static T count; void f(T); }; void X::f(T t = count) { }
f
的成员函数class X
在全局范围内定义;该 表示法X::f
指定函数f
是class X
的成员 在class X
的范围内。在函数定义中,参数 类型T
是指T
中声明的typedef成员class X
default参数count指的是声明的静态数据成员计数 在class X
。 * - 结束示例] *