首页 > 解决方案 > C ++:将指向常量对象的指针复制到非常量对象指针中

问题描述

在我的自定义类中,将输入变量指针声明为常量并将其复制到非常量成员变量指针时出现错误。

我得到的错误是:

无法使用“const Position *”类型的左值初始化“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 *'
  {}
};

标签: c++classooppointersconstants

解决方案


第一个参数不引用构造函数范围之外的任何内容,因为它只是一个副本。这种情况下的 const 只是说您的构造函数本身不允许更改attack.

第二个参数是指向 a 的指针const Position。如果您可以将其分配给非 const Position*,那么您可以通过非常量指针改变该位置。如果允许这样做,那么如果某人有一个不想被您的构造函数更改的 Position 指针,则他们将无法创建您的类的实例。

请注意,您可以通过将第二个参数更改为 来使第二个参数的行为与第一个参数相同Position* const position。这使得指针 const 但不是它指向的对象。

请参阅相关问题。


推荐阅读