Netbeans在使用c ++ std :: map :: operator []时遇到了一些麻烦

时间:2014-10-22 11:39:33

标签: c++ netbeans map operators

我使用的是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;

有什么想法吗?

1 个答案:

答案 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指针。