这是我遇到问题的代码:
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;
那我怎样才能访问关键成员?
答案 0 :(得分:3)
你有一个错误的错误。
for (int i=0; i <= AllTriggerPads.size() ;i++)
替换为
for (int i=0; i < AllTriggerPads.size(); ++i)
(++的东西是无关紧要的,总是使用预增量只是更好的做法)
答案 1 :(得分: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();
}
}