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

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)

son*_*yao 6

myClass aClass;是一个定义,需要myClass一个完整的类型 ; myClass必须在编译时知道大小和布局.

以下任何上下文都要求T类完成:

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

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

请注意,前向声明适用于那些不需要完成类型的情况,例如指向类型的指针的定义(如myClass* p;).

对于功能而言,故事是不同的.函数是ODR使用的,如果一个函数调用它是由,那么它的定义必须存在某处.请注意,在编译时不需要该定义,在main()(之前的声明)之后定义它是正常的.

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


顺便说一句:extern在类的前向声明中使用是多余的.

  • 所以不可能有一个类原型,因为类只定义一次,这是在main()之前.那是我在这里读的吗? (2认同)
  • @razorozx对于这种情况,是的,`myClass`必须在`main()`之前定义.请参阅答案中添加的附加信息. (2认同)