【问题标题】:C++ One file several classesC++ 一个文件几个类
【发布时间】:2013-07-29 00:38:30
【问题描述】:

我想将两个类保存在一个文件中,并且我希望其中一个在其中包含另一个的实例。所以在我的头文件中我有这样的东西:

class Box{
    Item a,b,c;
    /*
    ...
    */
}

class Item{
    /*
    ...
    */
}

显然编译器说它不知道什么项目。如何让它看到 Item 类?

【问题讨论】:

    标签: c++ class dependencies


    【解决方案1】:

    只需将项目类定义移动到类Box 之上。现在 Box 可以看到完整的 Item 类型,并且成为 Box 的成员是有效的。

    class Item{
        /*
        ...
        */
    }
    
    class Box{
        Item a,b,c;
        /*
        ...
        */
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过在代码开头添加来转发声明您的类:

       class Box;
       class Item;
      

      请注意,编译器应该知道类的每个数据成员的大小。您可能希望重新排序您的类定义以确保,或使用指针等...

      您可能想要使用原始指针、引用、智能指针……

      【讨论】:

      • 这在这种情况下不起作用,正是因为你提到的原因:编译器需要知道成员的大小。
      • "注意编译器应该知道类的每个数据成员的大小。"如果对于 T 类型这是不可能的,您应该使用指向 T 的指针和引用来规避问题。
      • @user2485710 好吧,我宁愿将类声明拆分为两个文件,也不愿使用指针“规避问题”。
      【解决方案3】:

      试试这个:

      class Item{
          /*
          ...
          */
      }
      
      class Box{
          Item a,b,c;
          /*
          ...
          */
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 2014-01-02
        相关资源
        最近更新 更多