我正在制作一个游戏,其中我控制游戏对象的主要类是" inGame"。 在" inGame"。
中会有其他几个自定义类等
class mouse
{
int x, y;
bool alive;
float speed;
public:
mouse(int xx, int yy, float spd, bool alv)
{
x = xx; y = yy; speed = spd; alive = alv;
}
// member functions
};
class inGame
{
mouse m1;
dog d1; // single object which are easy to construct
public:
inGame() : d1(200, 400, 1.5, false), m1(40, 40, 0.5, false) //This works fine
{} //coordinates fixed and set by me
// member functions
};
但现在可以说我想要3个鼠标。所以我想到了m1 [3]或者也许是一个载体。
class inGame
{
mouse m1[3]; // like i want 3 mouse(animals) in the game screen
dog d1; // single object which are easy to construct
public:
inGame() : d1(200, 400, 1.5, false) //Confusion here m1(40, 40, 0.5, false)
{}
// members
};
所以我尝试了以下内容:
inGame() : m1[0](1,2,3,true), m1[1](2,3,4,true), m1[2](3,4,5,true) { } //NO
inGame() : m1 { (1,2,3,true), (2,3,4,true), (3,4,5,true) } { } //NO
inGame() : m1 { (1,2,3,true), (2,3,4,true), (3,4,5,true); } { }
即使我使用std :: vector m1,那么如何通过inGame默认构造函数初始化?它会在构造函数内写吗?
mouse temp(1,2,3,true);
m1.push_back(temp);
哪种方法比较好? 在主要我会做:
inGame GAME; //Just to construct all animals without user requirement
感谢。
更新:
没有运气
inGame() : m1 { mouse(1,2,3,true), mouse(2,3,4,true), mouse(3,4,5,true) } { }
inGame() : m1 { {1,2,3,true}, {2,3,4,true}, {3,4,5,true} } { }
" m1 {"那"期待a)"。并且m1 {"}< - "那"期待a;"
答案 0 :(得分:5)
假设您使用的是C ++ 11或更高版本,
inGame() : m1{{1,2,3,true}, {2,3,4,true}, {3,4,5,true}}
{}
无论是常规数组,std::array
,std::vector
还是任何其他序列容器,都可以使用。
如果你坚持使用古老的方言,那么初始化将会更成问题。使用向量,并在构造函数中调用push_back
,如您所述,可能是最不讨厌的方法。要使用数组,您需要为mouse
提供默认构造函数,然后重新分配构造函数中的每个元素。
答案 1 :(得分:4)
您需要使用大括号括起来的初始化器:
inGame() : m1 { {1,2,3,true}, {2,3,4,true}, {3,4,5,true} } { }
如果没有C ++ 11,您将需要使用诸如std::vector<mouse>
之类的容器并将其填充到构造函数的主体内,或者使用返回适当初始化的函数的函数:
std::vector<mouse> make_mice()
{
std::vector<mouse> v;
v.reserve(3);
v.push_back(mouse(1, 2, 3, true));
v.push_back(mouse(2, 3, 4, true));
v.push_back(mouse(3, 4, 5, true));
return v;
}
然后
inGame() : m1(make_mice()) {}
其中m1
现在是std::vector<mouse>