我的重载运算符中的访问冲突有一些问题。我意识到我做错了什么,这很可能是一个愚蠢的错误,但我不知道那可能是什么。
我有以下内容:
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;
}
提前感谢您的所有帮助!
答案 0 :(得分:2)
你的问题似乎是关于指针的推理,而不是运营商特有的任何事情。
我有一个指向Circle的const指针。所以,我的指针不能改变地址
true - 无论你的const指针初始化为指向什么对象,它都不能改为指向其他对象。
然而地址内的Circle值本身可以改变
是的,如果你的const指针指向一个对象,你可以就地改变对象
所以我的尝试是更改innerCircle
中的Circle值
但这假设UPDATE e
SET e.PayerType = IIF(p.payer_type=1,'Ep','NonEp'),
e.LUPAAlert = IIF((p.payer_type)<>'1',0,IIF(EpEnd<=getdate(),0,IIF(TotVisits<5,1,0))),
e.LUPADays = IIF((IIF((p.payer_type)<>'1',0,IIF(EpEnd<=getdate(),0,IIF(TotVisits<5,1,0))))=0,0,EpEnd - CAST(getdate() as date)),
e.FinalAlert = IIF((p.payer_type)<>'1',0,IIF(abs(DATEDIFF(millisecond,getdate(),EpEnd))>1,0,1)),
e.FinalDays = IIF((IIF((p.payer_type)<>'1',0,IIF(abs(DATEDIFF(millisecond,getdate(),EpEnd))>1,0,1)))=1,abs(DATEDIFF(millisecond,getdate(),EpEnd)),0),
e.RAPAlert = IIF(p.payer_type='1',IIF(abs(DATEDIFF(millisecond,getdate(),EpStart))>0,1,0),0),
e.RAPDays = IIF((IIF(p.payer_type='1',IIF(abs(DATEDIFF(millisecond,getdate(),EpStart))>0,1,0),0))=1,abs(DATEDIFF(millisecond,getdate(),EpStart)),0)
FROM tb_Episode as e
LEFT JOIN tb_Payer as p ON (e.CustID = p.company_id) AND (e.PayorType = p.payor_type)
LEFT JOIN tb_HHPPS as h ON e.HHPPS = h.HHPPS
WHERE e.billed_flag = '0'
指向一个对象。您已将其初始化为innerCircle
,这意味着未指向任何对象。这就是nullptr
(或旧nullptr
)的含义。
由于你的指针没有指向一个对象,所以你没有任何东西可以合法地改变。由于您声明了指针NULL
,因此您也无法将其更改为指向真实对象。
之后,正如borgleader所说,你得到了圆问题的递归定义。
也许const
应该只有一个(也许是nullptr)指向圆圈的指针,如果请求它可以变异指向Circle
?例如
Circle
答案 1 :(得分:1)
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;
你正在获得并将永远得到一个空。