
请问此处为什么会报错?类声明后不可以在另一个类的构造函数中使用它吗?
怎么理解他们的执行顺序?先构造Building还是Friends?

阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
你遇到了一个常见的问题:在 C++ 中,一个类不能在另一个类的构造函数中使用未定义的类。
这是因为,在编译时,编译器需要知道类的定义,以便正确地生成代码。然而,在构造函数中使用未定义的类,编译器无法知道该类的定义,从而导致编译错误。
在你的情况中,Building 类可能在 Friends 类的构造函数中使用了未定义的类,这会导致编译错误。
解决方案是,确保在使用未定义的类时,已经定义了该类。可以通过将未定义的类的定义移到前面,或者使用 forward declaration(前向声明)来解决这个问题。
例如:
class Building; // 前向声明
class Friends {
public:
Friends(Building* building); // 使用未定义的类
};
class Building {
public:
Building() {
// ...
}
};
在上面的代码中,我们使用前向声明来声明 Building 类,然后在 Friends 类的构造函数中使用 Building 类。
关于执行顺序,你可以认为,在编译时,编译器会先处理类的定义,然后再处理构造函数的定义。在你的情况中,编译器会先处理 Building 类的定义,然后再处理 Friends 类的定义。
因此,在构造函数中使用未定义的类时,编译器无法知道该类的定义,从而导致编译错误。