所以我在学习课程,偶然发现我发现的东西对我来说很尴尬.
class Nebla
{
public:
int test()
{
printout();
return x;
}
void printout()
{
printout2();
}
private:
int x,y;
void printout2()
{
cout<<"Testing my class";
}
};
Run Code Online (Sandbox Code Playgroud)
我发现在一个类中我可以在声明它们之前使用函数(原型)
你可以看到我用
printout(),printout2()decleration之前.
我也可以在声明变量之前使用变量
你可以看到我做到了
return x; 在声明x之前.
为什么我可以在声明之前在类中使用函数和变量但在类之外如果我这样做,我会收到错误?
谢谢
只要稍后在翻译单元中定义,就可以声明一个类而不定义它(前向声明).在函数的情况下,可以声明函数而不在转换单元中定义它,并且链接器将其链接到其在不同转换单元中的定义.是否有可能对类声明做同样的事情?
(如果这不可能,对于在当前TL中没有定义的前向声明的类有什么用处,还是总是出错?)
像这样的东西,除了这不编译:
mymain.cpp:
class myclass; // declare without defining
myclass::myclass();
void myclass::barf();
int main() {
myclass *m = new myclass();
m->barf();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
myclass.cpp:
#include <iostream>
class myclass { // define the implementation
public:
myclass();
void barf();
};
myclass::myclass() { } //empty constructor
void myclass::barf() {
std::cout << "barfing\n";
}
Run Code Online (Sandbox Code Playgroud)