当函数的前向声明在源文件(.cpp)中工作时,为什么同样的方法对于类不起作用?
谢谢.
// main.cpp void forwardDeclaredFunction() ; // This is correct class One ; // Why this would be wrong int One:: statVar = 10 ; void One :: anyAccess() { std::cout << "\n statVar:\t " << statVar ; std::cout << "\n classVar:\t" << classVar ; } class One { public: void anyAccess() ; static int statVar ; private: int classVar ; } ; int main (int argc,char * const argv[]) { One *obj = new One ; return 0; } void forwardDeclaredFunction() { }
解决方法
前进声明也可以为课程工作:
class Foo; class Bar { public: Foo *myFoo; // This has to be a pointer,thanks for catching this! }; class Foo { public: int value; };
上面的代码显示了Foo类的前向声明,在另一个类(Bar)中使用Foo *类型的变量,然后是Foo类的实际定义.只要您在使用代码之前实现它们,C不在乎您是否将未实现的内容保留下来.定义指向某一类型对象的指针不是“使用其代码”.
快,肮脏的回复,但我希望它有帮助.
编辑:声明未实现的类的非指针变量将不会按照声明的回复进行编译.这样做正是我使用“代码”的意思.在这种情况下,每当调用Bar构造函数时,都会调用Foo构造函数,因为它具有类型为Foo的成员变量.由于编译器不知道您计划稍后实现Foo,所以会抛出错误.对不起,我错了 ;).