C++ class 原型无法正常工作?
C++ class prototype not working properly?
我正在尝试创建一个 class 原型,但我一直收到错误消息:'aClass' 使用未定义的 class 'myClass'
我很确定我正在正确制作原型。使用原型函数有效,但 class 原型无效。
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;
}
myClass aClass;
是一个定义,要求myClass
是一个complete type; myClass
的大小和布局必须在编译时知道。
Any of the following contexts requires class T to be complete:
- ...
- definition of an object of type T;
- ...
这意味着 class 必须在此之前定义。
请注意,前向声明适用于不需要类型完整的情况,例如指向类型的指针的定义(如 myClass* p;
)。
对于函数来说,情况就不同了。一个函数是 odr-used 如果对它进行函数调用,那么它的定义必须存在于某处。请注意,编译时不需要定义,在 main()
之后定义它(之前声明)就可以了。
a function is odr-used if a function call to it is made or its address is taken. If an object or a function is odr-used, its definition must exist somewhere in the program; a violation of that is a link-time error.
顺便说一句:在 class 的前向声明中使用 extern
是多余的。
我正在尝试创建一个 class 原型,但我一直收到错误消息:'aClass' 使用未定义的 class 'myClass'
我很确定我正在正确制作原型。使用原型函数有效,但 class 原型无效。
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;
}
myClass aClass;
是一个定义,要求myClass
是一个complete type; myClass
的大小和布局必须在编译时知道。
Any of the following contexts requires class T to be complete:
- ...
- definition of an object of type T;
- ...
这意味着 class 必须在此之前定义。
请注意,前向声明适用于不需要类型完整的情况,例如指向类型的指针的定义(如 myClass* p;
)。
对于函数来说,情况就不同了。一个函数是 odr-used 如果对它进行函数调用,那么它的定义必须存在于某处。请注意,编译时不需要定义,在 main()
之后定义它(之前声明)就可以了。
a function is odr-used if a function call to it is made or its address is taken. If an object or a function is odr-used, its definition must exist somewhere in the program; a violation of that is a link-time error.
顺便说一句:在 class 的前向声明中使用 extern
是多余的。