文件之间的转发声明

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'的类型不完整,无法定义

我认为是因为我不明白如何使用前向声明,所以有人可以告诉我该怎么做吗?

顺便说一句,我知道头文件的方式来做到这一点,但我只是想以这种前向声明的方式弄清楚.

最好,

Dav*_*ave 6

由于您只是将它声明为一个类(即您没有告诉编译器该类包含什么),因此它无法为它创建内存(它不知道它需要多大).

可以做的是定义一个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在文件中后,您将能够按预期创建和使用它.