#include <iostream>
class Character
{
private:
short x = -1;
short y = -1;
};
class Luchnik : public Character
{
public:
Luchnik(short x, short y) {
this->x = x;
this->y = y;
}
private:
short x = 0;
short y = 0;
};
int main() {
Luchnik *l = new Luchnik(1, 2);
Character a();
&a = l;
delete l;
return 0;
}
visual stuido 写入表达式必须有效才能更改左侧值。
这是屏幕截图
更新
或者您可以在 Luchnik 构造函数中获取一个向量指针并将 vector[x][y] 对象更改为 Luchnil
我是这样写的,但是不行,看不懂指针和类的东西
Luchnik(short x, short y, std::vector<std::vector<Character>> map) {
this->x = x;
this->y = y;
Character* pm = &(map[x][y]);
pm = *this;
}
int main() {
std::vector<std::vector<Character>> board = new std::vector<std::vector<Character>>(3, std::vector<Character>(4));
Luchnik l(1, 2, *board);
return 0;
}
没错,因为不可能将某些东西分配给对象的地址。这就像为变量赋值:
在这里你有没有反对这样的分配是不可接受的?
但无论如何,请记住
是一个没有参数的函数声明,它返回一个类型的值
Character
。a
类型对象声明Character
必须采用不同的形式:或者
只有在您解释了您想要做什么、这段代码应该做什么之后,您才能准确地建议如何修复您的代码。
更新
如果我正确理解您的任务,那么您需要创建一个指针
vector<Character*>
向量;然后你可以为孩子分配一个指针:由于切片,
vector<Character>
您将无法使用它,并且很难通过代理类创建链接向量,在我看来,您不应该弄乱它。使用指针更容易。reference_wrapper
更新 2(我们会关闭这个问题吗?:))
您可能需要以下内容:
再次:
std::vector<std::vector<Character>>
由于切割而无法使用。您正在尝试更改它所在的变量的地址。C++ 不允许你这样做。为了引用现有对象,您必须使用指针或引用。
在指针的情况下,代码将是:
这个供参考: