我使用的是Netbeans IDE 8.0,我遇到了一些麻烦。
以下是解释问题的一大块代码:
typedef struct Context {
bool finished;
bool reliable;
bool running;
bool firstAckReceived;
map<uint32_t, uint32_t>* missingChunks;
} Context;
map<uint32_t, Context*>* contexts;
...
this->contexts->operator[]((uint32_t) ctrl.getSource())->running = true;
当使用建议(CTRL + Space)时,operator []返回Context&amp;正如所料,但在此之后无法给我任何建议。 Netbeans并不认为它是一个可以取消引用以获取上下文字段的上下文。
编译没问题 而且,&#34; - 运行&#34;被突出显示为一个错误,一直困扰着我。 这会发生很多吗?
另外,我认为我应该能够使用如下语法访问该元素,但g ++抱怨......
this->contexts[(uint32_t) ctrl.getSource()]->running = true;
有什么想法吗?
答案 0 :(得分:0)
我认为你有
this->contexts->operator[]((uint32_t) ctrl.getSource())->running = true;
// ^------------- notice this
而不是
this->contexts.operator[]((uint32_t) ctrl.getSource())->running = true;
// ^------------- notice this
回想一下,我们使用->
作为指针,.
作为非指针。
以下
this->contexts[(uint32_t) ctrl.getSource()]->running = true;
相当于第二个版本。您需要取消引用指针,或者,我首选的方式,考虑为什么你有这么多的原始指针。
我建议你改变
map<uint32_t, Context*>* contexts;
到
map<uint32_t, Context*> contexts;
然后你应该考虑谁拥有地图中的原始Context
指针。