Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:C2280错误:Can';t将矩阵项设置为给定值_C++ - Fatal编程技术网

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 have
vector vec
和do
vec[1]=5
它可以工作,我打算创建一个空的
mapObjMatrix
,然后用
环境
对象逐项填充它。我的导师告诉我,使用
推回
不是一个好方法,因为它的内存效率非常低,而且我应该创建一个空矩阵,因为我有高度和宽度,然后填满它
Environment();