【发布时间】:2021-06-19 08:19:04
【问题描述】:
在我的自定义类中,将输入变量指针声明为常量并将其复制到非常量成员变量指针时出现错误。
我得到的错误是:
无法使用“Position *”类型初始化成员子对象 'const Position *' 类型的左值
为什么会这样?为什么这与其他成员变量(_attack)不一致?它只是复制指针(地址)的值,就像复制 int (_attack) 的值一样。
class Creature
{
private:
int _attack;
Position* _position;
public:
Creature(const int attack, const Position* position)
: _attack{attack}, _position{position} // ERROR: Cannot initialize a member subobject of type 'Position *' with an lvalue of type 'const Position *'
{}
};
【问题讨论】:
-
position是一个指向常量Position的指针。指针本身不是常量 -
是一致的。
_attack获得attack的副本,_position获得position的副本。但是,position是指向 const 对象的指针,_position不是。 -
知道了,谢谢大家。这是一个微妙但重要的区别,我一定把它和 Position* const (指向位置的常量指针)混淆了
-
并不总是对 C++ 代码有帮助,但对于 const 指针与指向 const 的指针,它确实有帮助:cdecl.org
标签: c++ class oop pointers constants