簡體   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