【发布时间】:2014-06-09 14:51:23
【问题描述】:
原始问题可以在下面找到。
所以,我们发现以下方法不起作用:
void f(){
g();
}
void g(){}
但是,它确实在类中工作,这就是我感到困惑的地方:
class test{
int getY(){
return getX();
}
int getX(){
return 10;
}
}
这在 MSVC10.0 下编译得非常好。
所以,改写之后,问题是:
为什么我不需要在类中进行前向声明?
原问题,请忽略
在 C++ 中,函数或变量的声明顺序根本不重要。调用尚未声明的函数并没有错。这同样适用于变量:
但是,它不适用于课程。如果我想使用稍后在源文件中定义的类,我必须转发声明它。
为什么?是什么阻止了编译器知道所有的类声明?
【问题讨论】:
-
"调用尚未声明的函数没有任何问题。"我想你可能想仔细检查那个。 ;)
-
@iFreilicht:如果您在
void f()上方有声明void g();,那么可以。但是你需要先声明它。 -
@iFreilicht 您的更新显示了一个特殊情况,使问题变得有趣。来自我的 +1。
-
声明一个包含所有成员的类是一个语句(因此您忘记了结束分号)。无论成员出现的顺序如何,整个声明都在其自身范围内。
-
更进一步的“在同一个完整声明中”的想法,类似
int a = a;,虽然荒谬,但不会产生“未声明的标识符”错误:ideone.com/6BazZS。
标签: c++ function class variables c++11