Kua*_*uan 4 c++ forward-declaration
所有:
我有两个文件:
main.cpp中
#include <iostream>
using namespace std;
class A;
int main(){
A a;
a.disp();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和A.cpp
#include <iostream>
using namespace std;
class A{
public:
A(){}
void disp(){ cout<<"this is A disp()"<<endl;}
};
Run Code Online (Sandbox Code Playgroud)
我想知道为什么当我编译这两个文件时,它告诉我:
main.cpp:在函数'int main()'中:main.cpp:8:4:错误:聚合'A a'的类型不完整,无法定义
我认为是因为我不明白如何使用前向声明,所以有人可以告诉我该怎么做吗?
顺便说一句,我知道头文件的方式来做到这一点,但我只是想以这种前向声明的方式弄清楚.
最好,
由于您只是将它声明为一个类(即您没有告诉编译器该类包含什么),因此它无法为它创建内存(它不知道它需要多大).
你可以做的是定义一个A类的指针:
int main(){
A *a;
// a->disp() is still invalid
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但你无法用它做任何事情.
这正是标题的用途!
啊:
class A{
public:
A(){}
void disp();
};
Run Code Online (Sandbox Code Playgroud)
A.cpp:
#include "A.h"
void A::disp(){
cout<<"this is A disp()"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
包含a.h在文件中后,您将能够按预期创建和使用它.