首页 > 解决方案 > 不使用 class 关键字的前向声明

问题描述

class Wheel
{
    Car* car;
};

int main(){
 return  0;
}

上面的代码不会编译但是如果我添加一个class关键字然后编译工作:

class Wheel
{
    class Car* car;
};

为什么第一个示例无法编译?我也了解以下是实现此目的的另一种方法:

class Car;
class Wheel
{
   Car* car;
};

标签: c++

解决方案


就像你一样,编译器从上到下读取。如果你有一个类的对象指针而没有声明该类,编译器(像你一样)会“等等,这个类是什么?”


(编译器说“这是什么”,例如:

error: ‘Car’ does not name a type; did you mean ‘char’?

它是说,我不知道这种类型,我如何声明一个指向它的指针。它甚至试图对一个建议有所帮助,多么可爱!)


因此,您需要前向声明,并且为此专门允许使用它们。


推荐阅读