C ++类原型不能正常工作?

时间:2017-11-22 02:37:45

标签: 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;
}

1 个答案:

答案 0 :(得分:6)

myClass aClass;是一个定义,要求myClasscomplete type;在编译时,必须知道myClass的大小和布局。

  

以下任何一种情况都要求T级完成:

     
      
  • ...
  •   
  • T类对象的定义;
  •   
  • ...
  •   

这意味着必须在此之前定义类。

请注意,正向声明适用于那些不要求类型完整的情况,例如:指向类型的指针的定义(如myClass* p;)。

对于功能而言,故事是不同的。函数是odr-used如果对其进行函数调用,则其定义必须存在于某处。请注意,在编译时不需要该定义,在main()(之前声明)之后定义它是正常的。

  

如果对函数进行了函数调用或者对其执行了地址,则函数会被使用。如果一个对象或函数使用了odr,它的定义必须存在于程序的某个地方;违反这一点的是链接时错误。

BTW:在类的前向声明中使用extern是多余的。

相关问题