2010-02-27 2 views
2

У меня есть класс Board, где конструктор принимает размеры платы в качестве параметра. У меня также есть класс Puzzle, который содержит фрагменты, и я хочу, чтобы в качестве элемента данных был Board. Я хочу так, чтобы при создании экземпляра Puzzle у меня будет создан мой экземпляр Board, поэтому мне не нужно делать отдельные экземпляры в качестве пользователя. Однако, когда я объявляю доску в моем Puzzle.h файле, он нужен фактический номер для Board конструктора:Возможно ли иметь экземпляр класса в качестве члена данных другого класса?

// Puzzle.h file 

private: 
    Board theBoard(int height, int width); // Yells at me for not having numbers 

Есть ли способ, чтобы получить объект класса быть членом данные для другого класса, если этот объект еще не создан?

ответ

6

Если я правильно понимаю, проблема в том, что вам нужно правильно создать экземпляр платы:

class Puzzle { 
public: 
     Board theBoard; 

     Puzzle(int height, int width) : theBoard(height, width) // Pass this into the constructor here... 
     { 
     }; 
}; 
+0

Yup, это сделал. Я попытался сделать это сначала, не используя список инициализации. Почему список инициализаторов имеет значение? Благодарю. – Isawpalmetto

+0

Все члены должны быть инициализированы непосредственно при запуске конструктора. Вы можете использовать инициализацию по умолчанию, но если вы не используете указатель и нет конструктора по умолчанию, вам нужен список инициализаций для создания этих объектов. –

1

Вы должны объявить элемент данных без указания ничего больше, чем тип, а затем инициализировать его с особенным синтаксис списка инициализации конструктора. Пример будет гораздо понятнее:

class A 
{ 
    int uselessInt; 
    public: 
    A(int UselessInt) 
    { 
     uselessInt=UselessInt; 
    } 
}; 

class B 
{ 
    A myObject; //<-- here you specify just the type 
    A myObject2; 
    public: 

    B(int AnotherInt) : myObject(AnotherInt/10), myObject2(AnotherInt/2) // <-- after the semicolon you put all the initializations for the data members 
    { 
     // ... do additional initialization stuff here ... 
    } 
}; 

Here вы можете найти подробное объяснение.

Смежные вопросы