2010-02-27 54 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

是的,它做到了。我首先尝试这样做,而不使用初始列表。为什么初始化程序列表会有所作为?谢谢。 – Isawpalmetto 2010-02-27 23:12:48

+0

构造函数运行时,所有成员都需要直接初始化。你可以使用默认的初始化,但是如果你没有使用指针,并且没有默认的构造函数,你需要一个初始化列表来构造这些对象。 – 2010-02-27 23:23:02

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你可以找到一个详细的解释。

相关问题