我发现我只是展示这个代码。
所以我在这里有一个名为Game的类:它包含级别。如您所见,公共构造函数需要一组Lvl
类型对象。
class Game {
private:
Lvl *_levels[10];
public:
Game(Lvl levels[]){
Lvl* _levels=levels;
for(int i=0; i<10; i++){
//_levels[i]=levels[i];
cout << endl << "i : " << levels[i].get_stage(); // DOESN'T WORK !! (compiles though)
}
}
};
总的来说,我有以下几点:
int main(){
Lvl* lvls[10]={};
for(int i=0; i<10; i++){
lvls[i]=new Lvl(0, 1, 1+i, false); // get_stage() returns the 3rd parameter
cout << lvls[i]->get_stage(); //THIS ACTUALLY WORKS AND RETURNS THE CORRECT VARIABLE!
}
Game game=Game(*lvls);
}
因此,在main函数中,Lvl
对象的数组工作得很好,但出于某种原因,当我尝试将其作为参数传递以创建Game
对象时,我可以&#39; t使用构造函数中的参数...如果我尝试get_stage()
,它将返回随机数!也许是因为阵列没有正确通过?
无论如何,伙计们,这是我在这个网站上的第一篇文章,我希望你能够帮助我。也许我会坚持下去:) 如果有什么不清楚的地方,请随时提出。
答案 0 :(得分:0)
你应该用这种方式构建游戏:
Game game(lvls);
然后声明这样的构造函数:
typedef Lvl Lvls[10]; // Lvls is an array of 10 Lvl objects
Game(const Lvls& levels)
然后你将有一个const引用来处理整个数组,你用来访问它的代码将与main()
中的代码相同。
答案 1 :(得分:0)
在您的main函数中,您有一个名为x//1
的{{1}}指针数组。使用时将数组传递给构造函数,
Lvl
您实际上是取消引用指向lvls
中第一个指针的指针,该指针恰好是指向第一个Game game = Game(*lvls);
对象的指针。因此,构造函数中的lvls
实际上具有第一个Lvl
对象的地址,而不是levels
数组的地址。由于您的构造函数声明是
Lvl
lvls
被声明为Game(Lvl levels[]);
指针,这使整个事情合法化。编译器不会抛出任何错误。
如果您希望仅使用指针来完成整个事情,这是一个解决方案,
levels
然后使用
构建游戏Lvl