操作员问题 - 访问冲突

operator trouble - access violation

本文关键字:访问冲突 问题 操作员      更新时间:2023-10-16

我在结构的重载运算符中遇到了一些访问冲突问题。我意识到我做错了什么,这很可能是一个愚蠢的错误,但我只是不确定这可能在哪里。

我有以下几点:

struct Circle
{
Circle() : innerCircle(nullptr) {}
Circle * const innerCircle;
Circle& operator =(Circle *inner)
{
innerCircle[0] = inner;    // Exception thrown: read access violation. this was nullptr.
return *this;
}
}
void somefunction(Circle * c)
{
Circle *c2 = new Circle();
c->innerCircle[0] = c2;
}

提前感谢所有帮助!

您的问题似乎是对指针的推理,而不是特定于运算符的任何内容。

我有一个指向圆的常量指针。所以,我的指针无法更改地址

true - 无论您的 const 指针初始化为指向什么对象,它都不能更改为指向其他对象。

但是地址内的 Circle 值本身可以更改

是的,如果你的常量指针指向一个对象,你可以就地改变对象

所以我的尝试是更改内部圈内的圆值

但这假设innerCircle指向一个对象。您将其初始化为nullptr,这意味着它不指向任何对象。这就是nullptr(或旧NULL)的意思

由于您的指针不指向对象,因此您不能合法地改变任何内容。既然你声明了你的指针const,你也不能改变它来指向一个真实的对象。

之后,正如 borgleader 所说,你得到了圆问题的递归定义。

也许Circle应该只有一个(也许是 nullptr)指向圆的指针,如果需要,它可以变异为指向Circle?例如。

struct Circle
{
Circle() : innerCircle(nullptr) {}
Circle* innerCircle;
void insert(Circle *inner)
{
innerCircle = inner;
}
bool hasInner() const { return (innerCircle != nullptr); }
Circle* getInner() const) { return innerCircle; }
};
Object * const obj;        // read right-to-left:  const pointer to Object
Object const * obj;        // read right-to-left:  pointer to const Object
Object const * const obj;  // read right-to-left:  const pointer to const Object

看这里

康斯特之前还是之后的康斯特?

所以你有一个常量指针,它在构造函数本身中初始化为 null。所以你以后不能改变它。所以排队

c->innerCircle[0] = c2;

您正在获取并将始终获得 null。