繁体   English   中英

从对象指针的向量访问对象

[英]Accessing an object from a vector of object pointers

这是我遇到麻烦的一点代码:

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();
    }
}

这样很好!

太好了,我想我没有正确使用(obj指针的)AllTriggerPads向量。 所以我可以使用AllTriggerPads[i]->mRect.contains(event.getPos())但我不能使用AllTriggerPads[i]->get_key() 我无法通过AllTriggerPads[i]->key访问值本身,而我已经使用AllTriggerPads.at(i)尝试过它,但是随后出现了超出范围的错误,这使我感到更加疑惑。

AlltriggerPads用vector<TriggerPad*> AllTriggerPads;初始化vector<TriggerPad*> AllTriggerPads;

那么我该如何访问关键成员?

您遇到一个错误的错误。

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

用。。。来代替

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

(++无关紧要,始终使用预增量只是更好的做法)

您正在尝试访问不存在的数组元素。 这就是为什么它抛出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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM