从对象指针向量访问对象

Accessing an object from a vector of object pointers

本文关键字:对象 访问 向量 指针      更新时间:2023-10-16

这是我遇到问题的位代码:

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

这工作正常!

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

所有触发板初始化为 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();
    }
}