-1

这是我遇到问题的一些代码:

int pressedKey = event.getNativeKeyCode();

for (int i=0; i <= AllTriggerPads.size() ;i++) {
    if (AllTriggerPads[i]->get_key() == pressedKey){
        AllTriggerPads[i]->mBufferPlayerNode->start();
    }
}

出现get_key()错误EXC_BAD_ACCESS (Code=1, ...)

我似乎有一个参考问题。我在 mouseDown 和 fileDrop 函数中使用了几乎相同的代码:

for (int i=0; i < AllTriggerPads.size() ; i++) {

    if (AllTriggerPads[i]->mRect.contains(event.getPos())) {
        AllTriggerPads[i]->mBufferPlayerNode->start();
    }
}

这很好用!

Sooooo,我想我没有正确使用 AllTriggerPads 向量(obj 指针)。所以我可以使用AllTriggerPads[i]->mRect.contains(event.getPos()) 但我不能使用AllTriggerPads[i]->get_key(). AllTriggerPads[i]->key 我已经尝试过,但我无法访问该值本身,AllTriggerPads.at(i)但后来我得到一个超出范围的错误,这让我更加想知道。

AlltriggerPads 被初始化为 vector<TriggerPad*> AllTriggerPads;

那么如何访问关键成员?

4

2 回答 2

3

您遇到了一个错误。

for (int i=0; i <= AllTriggerPads.size() ;i++)

用。。。来代替

for (int i=0; i < AllTriggerPads.size(); ++i)

( ++ 的东西无关紧要,总是使用预增量是更好的做法)

于 2015-06-30T17:22:01.623 回答
1

您正在尝试访问一个不存在的数组元素。这就是它抛出的原因EXC_BAD_ACCESS。将 for 循环条件更改为

for (int i = 0; i < AllTriggerPads.size(); ++i) {
    if (AllTriggerPads[i]->get_key() == pressedKey) {
        AllTriggerPads[i]->mBufferPlayerNode->start();
    }
}

或者如果C++11启用了支持,请将其简化为

for (auto i : AllTriggerPads) {
    if (i->get_key() == pressedKey) {
        i->mBufferPlayerNode->start();
    }
}
于 2015-06-30T17:41:41.263 回答