[英]How to pass an array of objects as an argument in a constructor, then copy the passed array to another one (still in the constructor)
我发现我只想显示此代码。 所以我在这里有一个名为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);
}
因此,在主函数中, Lvl
对象的数组工作正常,但是由于某种原因,当我尝试将其作为创建Game
对象的参数传递时,无法在构造函数中使用该参数...如果尝试get_stage()
,它将返回随机数! 也许是因为数组未正确传递?
伙计们,无论如何,这是我在该网站上的第一篇文章,希望您能为我提供帮助。 也许我会坚持下去:)如果不清楚,请随时提出。
您应该这样构建游戏:
Game game(lvls);
然后像这样声明该构造函数:
typedef Lvl Lvls[10]; // Lvls is an array of 10 Lvl objects
Game(const Lvls& levels)
然后,您将获得一个指向要使用的整个数组的const引用,并且用于访问它的代码将与main()
的代码相同。
在您的主要功能中,您有一个称为lvls
的Lvl
指针数组。 当您使用将数组传递给构造函数时,
Game game = Game(*lvls);
您实际上是在取消指向lvls
中第一个指针的指针,而该指针恰好是您第一个Lvl
对象的指针。 因此,构造函数中的levels
实际上具有第一个Lvl
对象的地址,而不是lvls
数组的地址。 由于您的构造函数声明为
Game(Lvl levels[]);
levels
被声明为Lvl
指针,这使整个事情合法。 编译器不会引发任何错误。
如果您只想使用指针来完成全部操作,那么这是一种解决方案,
class Game {
private:
Lvl *_levels[10];
public:
Game(Lvl* levels[10]){
for(int i=0; i<10; i++) {
_levels[i] = levels[i];
cout << endl << "i : " << levels[i]->get_stage();
}
}
};
然后使用
Game game(lvls);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.