2015-11-20 3 views
-1

У меня есть этот класс 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. Я предполагаю, что частные члены не могут быть инициализированы, они просто заполнители, поэтому им не предоставляется физическая память. В одном из комментариев в этом сообщении говорится, что наличие указателя не является хорошей практикой.

Итак, мои вопросы: 1. Почему это не хорошая практика? если это действительно не очень хорошая практика. 2. Почему я не могу создать экземпляр другого объекта класса из частных атрибутов другого класса. 3. Есть ли другой способ, кроме указателя для решения этой проблемы? 4. Также кажется, что, если у меня нет пользовательского ctor и просто использую по умолчанию, он работает, опять же, я понятия не имею, почему.

+0

Используйте списки член инициализатора в конструкторе. –

+0

Вы можете уточнить, почему это не сработает? –

+0

Потому что 'Heap h (90);' просто неверный синтаксис. –

ответ

0

Я пытаюсь иметь экземпляр Heap в качестве частного члена в классе под названием Graph, но это не похоже на работу

Вы используете неправильный синтаксис.

Heap h(90); 

не является допустимым синтаксисом. Использование:

Heap h; 

Инициализировать его конструктор с помощью

Graph(int inSize) : size(inSize), h(90) { } // Or the appropriate size. 
Смежные вопросы