gpt4 book ai didi

c++ - 将 C++ 类的实例转换为 NSObject,然后添加到 NSMutableArray

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:16 24 4
gpt4 key购买 nike

这是我用 C++ 创建的一个简单类,用于我为 iOS 设备创建的音乐应用程序,它将存储一些音符值及其时序:

class info {
public:
float attackTime;
Note noteStriked;

void setData(float timeOfAttack, Note nameOfStrikeNote){
attackTime = timeOfAttack;
noteStriked = nameOfStrikeNote;
}
};

上面... Note 是一个结构,它只能包含默认值,例如 {SNARE, DRUM, HIHAT} 等等。这个想法是创建一个 Note 对象并将这些对象存储在 NSMutableArray 中以供以后访问。

然后在我的主 .h 文件中有一个 NSMutableArray sequenceOfNotes;在我的 .m 文件中,我试图将一个对象添加到我的可变数组中……但我不知道该怎么做。我尝试了各种方法,但都失败了!

//Create one instance of the class
NoteData *currentNoteData;

// Update the instance of the class.. its two variables: attackTime and noteStriked
currentNoteData->attackTime = timeHit;
currentNoteData->noteStriked = SNARE;

//Then im trying to add the above instance to my mutableArray below
[sequenceOfNotes addObject:currentNoteData];

该行产生的错误是无法使用“NoteData *”类型的左值初始化“id”类型的参数

错误修复后 id 想做的是能够在我选择的数组的任何位置检索我的对象,然后能够从该对象的特定索引处选择一个属性变量。

//PsuedoCode
array {
position 0: NoteData object {
attackTime = 45.34,
noteStriked = HIHAT
}
position 1: NoteData object {
attackTime = 65.32,
noteStriked = SNARE
}
position 2: NoteData object {
attackTime = 78.53,
noteStriked = HIHAT
}
position 3: NoteData object {
attackTime = 98.44,
noteStriked = KICK
}
etc etc

}

//and then convert NSObject to normal c++ object something like this...
NoteData temp = [noteSequence objectAtIndex:0];

//so that i can then do this:
float currentTime = temp.attackTime;
Note currentNote = temp.noteStriked;

显然存在转换问题..如果有人能帮我解决这个问题就太好了

最佳答案

您必须将 C++ 对象指针包装到 NSValue 中:

[MyArray addObject:[NSValue valueWithPointer:new MyCPPObject()]];

...

MyCPPObject *obj = [[MyArray objectAtIndex:index] pointerValue];

或者,你为什么不直接使用 vector<MyCPPObject>list<MyCPPObject>

关于c++ - 将 C++ 类的实例转换为 NSObject,然后添加到 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10251104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com