【问题标题】:Trouble creating a instance of a class within another class在另一个类中创建一个类的实例时遇到问题
【发布时间】:2015-11-20 22:42:24
【问题描述】:

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

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。我的猜测是私有成员不能被初始化,它们只是占位符,所以没有给他们物理内存。这篇文章中的一个 cmets 指出,使用指针并不是一个好习惯。

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

【问题讨论】:

  • 在构造函数中使用成员初始化列表。
  • 你能详细说明为什么这不起作用吗?
  • 因为Heap h(90); 是完全错误的语法。

标签: c++ instantiation private-members


【解决方案1】:

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

您使用了错误的语法。

Heap h(90);

不是有效的语法。使用:

Heap h;

使用构造函数初始化它

 Graph(int inSize) : size(inSize), h(90) { } // Or the appropriate size.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2015-02-06
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多