从对象指针向量访问对象

时间:2015-06-30 17:19:30

标签: c++ pointers vector cinder

这是我遇到问题的代码:

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;

那我怎样才能访问关键成员?

2 个答案:

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