raz*_*ozx 0 c++ class declaration definition forward-declaration
我正在尝试创建一个类原型,但是我不断收到错误:'aClass'使用未定义的类'myClass'
我很确定我正在制作原型.使用原型函数可以工作,但是类原型没有.
extern class myClass; // prototypes
extern void myFunction();
int main() // main
{
myClass aClass;
myFunction();
return 0;
}
class myClass { // this doesn't work
public:
void doSomething() {
return;
}
myClass() {};
};
void myFunction() { // this works
return;
}
Run Code Online (Sandbox Code Playgroud)
myClass aClass;是一个定义,需要myClass一个完整的类型 ; myClass必须在编译时知道大小和布局.
以下任何上下文都要求T类完成:
- ...
- 类型为T的对象的定义;
- ...
这意味着必须在此之前定义类.
请注意,前向声明适用于那些不需要完成类型的情况,例如指向类型的指针的定义(如myClass* p;).
对于功能而言,故事是不同的.函数是ODR使用的,如果一个函数调用它是由,那么它的定义必须存在某处.请注意,在编译时不需要该定义,在main()(之前的声明)之后定义它是正常的.
如果对函数进行了函数调用或者对其进行了地址处理,则函数会被使用.如果一个对象或函数使用了odr,它的定义必须存在于程序的某个地方; 违反这一点的是链接时错误.
顺便说一句:extern在类的前向声明中使用是多余的.
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |