c++ - 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 *'
{}
};
解决方案
第一个参数不引用构造函数范围之外的任何内容,因为它只是一个副本。这种情况下的 const 只是说您的构造函数本身不允许更改attack
.
第二个参数是指向 a 的指针const Position
。如果您可以将其分配给非 const Position*
,那么您可以通过非常量指针改变该位置。如果允许这样做,那么如果某人有一个不想被您的构造函数更改的 Position 指针,则他们将无法创建您的类的实例。
请注意,您可以通过将第二个参数更改为 来使第二个参数的行为与第一个参数相同Position* const position
。这使得指针 const 但不是它指向的对象。
请参阅此相关问题。
推荐阅读
- c# - 需要在 WPF 中的每个视图上指定 TextBox 样式
- java - Log4j2 不滚动日志文件
- javascript - using try catch on error generated by asynchronous callback function
- java - 从双数列表中获取给定值的最近索引值
- azure - azure apim 中的 JWT 验证失败错误
- javascript - 从 chrome 扩展打开一个 div 到网页(如开发工具面板显示)
- c# - 正则表达式拆分字符串,提取之前的字符串值和方括号之间的数值
- java - 在 Firebase Android 中选择查询
- kubernetes - 动态 URL 的 Kubernetes 入口
- django - 两个外键模型字段之间的区别