C ++类的数组

时间:2010-04-26 08:20:03

标签: c++

我正在开发游戏,但是我对关卡的初始化有问题。 (feld只是德语字段)

class level{
private:
    feld spielfeld[10][10];
public:
/*
other stuff
*/
    void init_feld();
};

void level::init_feld()
{
    for(int i=0;i!=10;i++){
        for(int n=0;n!=10;n++){
            spielfeld[i][n] = new feld(land, i, n);
        }
    }
}

错误:

错误:不匹配»operator =«in»((level *)this) - > level :: spielfeld [i] [n] =(operator new(24u),(,((feld *)) ))/ home /nick/stratego/feld.h:18:11:

备注:候选人是:feld& feld :: operator =(const feld&)进程终止,状态为1(0分,0秒)2个错误,0个警告

5 个答案:

答案 0 :(得分:6)

spielfeld[i][n]feld对象,new feld(land, i, n)动态分配new feld对象并返回指向该对象的指针。如果您要将feld值分配给spielfeld[i][n],可以使用:

spielfeld[i][n] = feld(land, i, n);

或者,您可以直接或使用其他成员函数设置spielfeld[i][n]的相应成员。

答案 1 :(得分:1)

你需要声明一个指向feld的指针数组数组。

class level{
private:
    feld * spielfeld[10][10];   // <-- Added pointer to here
public:
/*
other staff
*/
    void init_feld();
};

答案 2 :(得分:0)

在feld中定义的=运算符需要对feld的(const)引用,并且你向它传递一个指向feld的指针

答案 3 :(得分:0)

你正在使用“new”,但是feld不是一个指针数组,它是一个对象数组。

两种选择 -

  • 使它成为一个指针数组。 feld * spielfeld[10][10]请注意,如果你这样做,你现在必须担心删除由'new'创建的对象。

  • 或者,将其保留为对象数组(没有关于'delete#的故事)并以不同方式初始化它们。

spielfeld[i][n] = feld(land, i, n); // uses assignment operator

当构建和删除中间feld项时,这不是最有效或最优雅的方式,但它应该有效。根据feld包含的值,您可能需要编写赋值运算符....

答案 4 :(得分:0)

其他答案是正确的,因为您在使用赋值运算符时类型不匹配。错误消息可以解释为feld类没有赋值指向feld(feld *)的赋值运算符(operator =)。它建议的候选函数可能是默认赋值运算符(除非你已经实现了自己的运算符=)。

正如其他答案建议的那样,你可以改变spielfeld的类型来指向feld对象,或者当你将felds分配给数组时你可以删除operator new的使用(当然这会分配它们)堆栈,如果它们的大小很大,你可能不想要。)