iFr*_*cht -1 c++ variables class function c++11
原始问题可以在下面找到.
所以,我们发现以下内容不起作用:
void f(){
g();
}
void g(){}
Run Code Online (Sandbox Code Playgroud)
但是,它确实在一个类中工作,这就是我困惑的地方:
class test{
int getY(){
return getX();
}
int getX(){
return 10;
}
}
Run Code Online (Sandbox Code Playgroud)
这在MSVC10.0下编译得非常好.
因此,在重新措辞之后,问题是:
为什么我不需要在课堂内进行前向声明?
在C++中,声明函数或变量的顺序根本不重要.调用尚未声明的函数没有任何问题.这同样适用于变量:
但是,它不适用于课程.如果我想使用稍后在源文件中定义的类,我必须转发声明它.
为什么?什么阻止编译器知道所有类声明?
在C++中,声明函数或变量的顺序根本不重要.调用尚未声明的函数没有任何问题.这同样适用于变量.
......那根本不是真的吗?您需要在使用它们之前声明函数和变量,否则编译器对您不会特别满意.
编辑为了回应编辑,您所展示的是一个非常特殊的情况,其中涉及的所有内容都是类的内部.在这种特殊情况下,您可以使用未声明的变量和函数名称.您可以这样做的唯一原因是编译器将类定义视为一个单元,并在编译之前读取所有类.但是,一般来说,你必须转发声明一切.