繁体   English   中英

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

[英]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()的代码相同。

在您的主要功能中,您有一个称为lvlsLvl指针数组。 当您使用将数组传递给构造函数时,

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM