coffee++ 2025-03-03 22:14 采纳率: 100%
浏览 15
已结题

C++类内使用未定义的其他类

img


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

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-03-03 22:14
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    C++类内使用未定义的其他类

    你遇到了一个常见的问题:在 C++ 中,一个类不能在另一个类的构造函数中使用未定义的类。

    这是因为,在编译时,编译器需要知道类的定义,以便正确地生成代码。然而,在构造函数中使用未定义的类,编译器无法知道该类的定义,从而导致编译错误。

    在你的情况中,Building 类可能在 Friends 类的构造函数中使用了未定义的类,这会导致编译错误。

    解决方案是,确保在使用未定义的类时,已经定义了该类。可以通过将未定义的类的定义移到前面,或者使用 forward declaration(前向声明)来解决这个问题。

    例如:

    class Building; // 前向声明
    
    class Friends {
    public:
        Friends(Building* building); // 使用未定义的类
    };
    
    class Building {
    public:
        Building() {
            // ...
        }
    };
    

    在上面的代码中,我们使用前向声明来声明 Building 类,然后在 Friends 类的构造函数中使用 Building 类。

    关于执行顺序,你可以认为,在编译时,编译器会先处理类的定义,然后再处理构造函数的定义。在你的情况中,编译器会先处理 Building 类的定义,然后再处理 Friends 类的定义。

    因此,在构造函数中使用未定义的类时,编译器无法知道该类的定义,从而导致编译错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 3月3日