无法在另一个类

时间:2015-11-20 22:42:25

标签: c++ instantiation private-members

我有一个名为Heap的课程。我正在尝试将一个Heap实例作为一个名为Graph的类中的私有成员,但这似乎不起作用。

class Heap{
  private:
    Node* container;
    int size; 
    //... some more attrs ...
  public: 
    Heap(int inSize){
      size = inSize
      //... initialize other private attrs ...
    }

class Graph {
   private: 
     int size; 
     Heap h(90); 
   public: 
     Graph(int inSize){
       size = inSize;
     }

看了这篇文章How to create an object inside another class with a constructor?之后,我仍然无法弄清楚为什么我不允许在类Graph中初始化Heap。我的猜测是私人成员无法初始化,他们只是占位符,所以没有给他们物理记忆。这篇文章中的一条评论指出,有一个指针不是一个好习惯。

所以我的问题是: 1.为什么这不是一个好习惯?如果它确实不是一个好的做法。 2.为什么我不能从另一个类的私有属性中实例化另一个类对象。 除了指针解决这个问题之外还有另外一种方法吗? 4.此外,似乎如果我没有自定义ctor,只使用默认的ctor,它再次起作用,我不知道为什么。

1 个答案:

答案 0 :(得分:0)

  

我试图将一个Heap实例作为一个名为Graph的类中的私有成员,但似乎无法正常工作

您使用的语法错误。

Heap h(90);

不是有效的语法。使用:

Heap h;

使用

将构造函数初始化
 Graph(int inSize) : size(inSize), h(90) { } // Or the appropriate size.