2011-12-21 78 views
0

我正在做一些從Qt Cocos2d到iOS cocos2d的移植,我正在使用Objective-C++作爲最小努力的語言,現在我正在將NSMutableArray包裝到C++類中以便於移植,基本上這是我的課NSMutableArray包裝在C++類

QList.h

#ifndef QLIST_H 
#define QLIST_H 

#import <Foundation/Foundation.h> 

class QList { 
    NSMutableArray* List; 

public: 
    QList(); 
    ~QList(); 
    void append(id); 
    id at (int i); 
    int size(); 
    bool isEmpty(); 
    id takeLast(); 
    id last(); 
    void prepend(id); 
    id takeAt(int i); 
    id takeFirst(); 
    void clear(); 
}; 

#endif 

QList.mm

#ifndef QLIST_MM 
#define QLIST_MM 

#import "QList.h" 

QList::QList() { 
    List = [[NSMutableArray alloc] init]; 
} 
QList::~QList() { 
    [List autorelease]; 
    List = nil; 
} 
void QList::append(id object) { 
    [List addObject:object]; 
} 

id QList::at(int i) { 
    return [List objectAtIndex:i]; 
} 

int QList::size() { 
    return [List count]; 
} 

bool QList::isEmpty() { 
    if ([List count] == 0) 
     return true; 
    return false; 
} 

id QList::takeLast() { 
    id temp = [List lastObject]; 
    [List removeLastObject]; 
    return temp; 
} 

id QList::last() { 
    return [List lastObject]; 
} 

void QList::prepend(id object) { 
    [List insertObject:object atIndex:0]; 
} 

id QList::takeAt(int i) { 
    id temp = [List objectAtIndex:i]; 
    [List removeObjectAtIndex:i]; 
    return temp; 
} 

id QList::takeFirst() { 
    return takeAt(0); 
} 

void QList::clear() { 
    [List removeAllObjects]; 

} 

#endif 

我在這一行recieving EXC_BAD_SIGNAL

return [List count]; 

誰能幫助我,我非常感激,在此先感謝:)

+0

這沒有問題,問題在於此行 ai_uni t.playerP = this; 我被註釋掉它,直到稍後的時間,所以我可以取消它,它試圖訪問:) 謝謝!如果你有意見了這段代碼,讓我知道:P – shbli

+0

諮詢/警告:確保你的代碼不會隱式地拷貝一個'QList'對象,或者你最終可能會通過調用釋放'List'來保留在拷貝構造函數中。 – Joe

+0

謝謝你的建議,實際上我也刪除了析構函數〜QList中的代碼,因爲它導致了問題,並且添加了一個叫做release的函數,在使用任何QList之後,我手動釋放它 – shbli

回答

0

有這個沒有問題,問題是在這條線

ai_unit.playerP = this; 

我被註釋掉它,直到以後我可以取消它的註釋,並試圖訪問該:)謝謝!,如果您對此代碼有任何建議,請告知我:P