如何在构造函数中将对象数组作为参数传递,然后将传递的数组复制到另一个(仍在构造函数中)

时间:2017-11-11 03:33:17

标签: c++ arrays c++11

我发现我只是展示这个代码。 所以我在这里有一个名为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(),它将返回随机数!也许是因为阵列没有正确通过?

无论如何,伙计们,这是我在这个网站上的第一篇文章,我希望你能够帮助我。也许我会坚持下去:) 如果有什么不清楚的地方,请随时提出。

2 个答案:

答案 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