C++ C++;:C2280错误:Can';t将矩阵项设置为给定值
我用自己的C++ C++;:C2280错误:Can';t将矩阵项设置为给定值,c++,C++,我用自己的Environment类型创建了一个向量矩阵,我想在给定位置给它一个特定的Environment值,但随后发生了C2280错误。(C2280“Environment&Environment::operator=(const Environment&)”:尝试引用已删除的函数) Environment类接受3个参数:矩阵中的x和y位置和char-envChar。这里是i,y和lineChar 这是环境标题 class Environment { private: const in
Environment
类型创建了一个向量矩阵,我想在给定位置给它一个特定的Environment
值,但随后发生了C2280错误。(C2280“Environment&Environment::operator=(const Environment&)”:尝试引用已删除的函数)
Environment
类接受3个参数:矩阵中的x
和y
位置和char-envChar
。这里是i
,y
和lineChar
这是环境
标题
class Environment {
private:
const int x, y;
EnvironmentType eType;
public:
Environment(int x, int y, char envChar);
char getChar() const;
static EnvironmentType getEType(char letter);
};
这就是环境
构造函数:
Environment::Environment(int x, int y, char envChar)
:
x(x),
y(y),
eType(getEType(envChar))
{}
EnvironmentType
只是一个枚举类:
enum EnvironmentType {
FLOOR, ROBOT_START, PATCHBOT_START,
SERCRETPASSAGE, CONCRETEWALL, STONEWALL,
MANUAL_DOOR, AUTOMATIC_DOOR,
ALIENGRAS, GRAVEL,
ABYSS, WATER,
SERVER, GRAVE
}
这是抛出错误的一行:
mapObjMatrix[i][j] = Environment(i, j, lineChar);
i
和j
来自嵌套的for循环mapObjMatrix
具有类型std::vector
这是构造函数中的一个片段(不是来自环境
类):
objMatrix-mapObjMatrix(mapHeight,std::vector(mapWidth));
这->mapObjMatrix=mapObjMatrix;
如果需要更多的代码来指定问题,只需询问。我不知道这是否足够
提前感谢正如@rafix07在评论中已经解释的那样,您有两个问题 首先,您提到的错误消息指出,
Environment
的复制分配运算符不可用
这意味着mapObjMatrix[i][j]=环境(i,j,lineChar)将一个环境
分配给另一个环境
的代码>,没有匹配的运算符重载来执行此分配
复制分配运算符不可用(默认情况下通常是这样)的原因是您正在环境中使用const
成员<代码>常量
变量在初始化后无法更改,因此无法为其赋值。移除常量int x,y前面的常量
代码>和该错误将消失
其次,您尝试使用std::vector(mapWidth)
,它需要一个默认构造函数来构造向量中的环境
元素。您没有定义默认构造函数,也没有隐式声明的构造函数(因为当您有任何用户提供的构造函数时,隐式默认构造函数不会被声明),因此这也会生成错误消息
您可以通过定义默认构造函数来解决此问题:
Environment();
对于您的类Environment
@rafix07,这是我的Environment
构造函数:`Environment::Environment(intx,inty,char-envChar):x(x),y(y),eType(getEType(envChar)){}`最后一部分eType(getEType(envChar))
将给定的envChar转换为枚举值请提供包含完整错误消息的。C2280“环境与环境::运算符=(const-Environment&)”:尝试引用已删除的函数请提供并将错误消息添加到问题中。可以复制、粘贴并再现您的问题。它也是最小的。删除每一行不必要的代码。我真的很抱歉,我花了这么长时间才提供指定问题所需的所有代码。从int x,y
删除const
,结果与预期完全一致,导致了第二个问题,您也立即解决了。非常感谢:)但我还有一个问题:看起来,我不能使intx,y
const
,但是如果我可以的话,这将是有利的,因为x
和y
是地图上的一个瓷砖的位置,所以如果位置是inchangable@Cpt.Crazy如果你想让它们保持不变,那么您期望什么mapObjMatrix[i][j]=Environment(i,j,lineChar)代码>要做什么?左侧已经包含一个环境
,其x
和y
。它们无法改变。如果您的目的是只创建向量,而不首先默认构造元素,然后分配新的元素,那么您不应该使用std::vector(mapWidth)
,而应该使用std::vector()
,然后push_back
,而不是mapObjMatrix[…]=
。在这种情况下,没有完成赋值或默认构造,您可以将类保留为isIf I havevector vec
和dovec[1]=5
它可以工作,我打算创建一个空的mapObjMatrix
,然后用环境
对象逐项填充它。我的导师告诉我,使用推回
不是一个好方法,因为它的内存效率非常低,而且我应该创建一个空矩阵,因为我有高度和宽度,然后填满它
Environment();