我正在开发游戏,但是我对关卡的初始化有问题。 (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个警告
答案 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的使用(当然这会分配它们)堆栈,如果它们的大小很大,你可能不想要。)