在另一个类中创建类的实例时出现问题

Trouble creating a instance of a class within another class

本文关键字:实例 问题 另一个 创建      更新时间:2023-10-16

我有一个名为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;
     }

看了这篇文章,如何用构造函数在另一个类中创建对象?,我仍然不明白为什么不允许在Graph类中初始化Heap。我的猜测是,私有成员不能初始化,它们只是占位符,所以没有物理内存给它们。这篇文章中的一条评论指出,有一个指针不是一个好的做法。

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

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

你使用了错误的语法。

Heap h(90);

不是有效的语法。用途:

Heap h;

使用将其初始化为构造函数

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