我有一个结构,其中包含指向必须在我的班级中的多个函数中使用的值的指针。我在标题中定义了类型
typedef struct MyAUGraphPlayer {
AUGraph graph;
AudioUnit speechAU;
} MyAUGraphPlayer;
并在.m,
中声明@implementation SpeechGraph {
MyAUGraphPlayer player;
}
然而,在尝试初始化它时,我从此代码中得到错误“Unexpected expression”(错误在于行播放器= ...)
- (void)setup {
player = { 0 };
CreateMyAUGraph(&player);
}
播放器变量被识别为MyAUGraph类型,但执行传统的{0}赋值会导致编译时错误。
我已经在命令行项目中构建了这个Core-Audio代码,但是现在我正在尝试围绕它构建一个UI,显然C核心内容和面向对象之间的某些混合让我感到困惑。我非常感谢一些帮助。
答案 0 :(得分:2)
首先:player
不是全局变量。它是SpeechGraph
的实例变量(ivar)。
第二:在现代Objective-C中,默认情况下,实例变量在新alloc
ed对象中初始化为0。无需再次将此值设置为0。请参阅Programming With Objective-C,"使用对象","对象是动态创建的"。
第三:如果你真的需要设置值,player = (MyAUGraphPlayer) { 0 };
应该有效。 (这是一项任务,而不是初始化。More about the difference.)
答案 1 :(得分:1)
您只能在首次声明变量时初始化变量。当你的方法被调用时,它已经很晚才进行初始化。
您在此处尝试执行的操作被解释为编译器的赋值(在声明初始化后仅=
!) - 右侧值是此处的块。这是导致编译器错误的原因。
你必须亲自(或不是全部)这样做。
答案 2 :(得分:0)
我认为你只能在声明时初始化一个结构。
MyAUGraphPlayer player = {0};
在你的情况下,你应该像这样使用memset。
memset的(安培;播放器,0,的sizeof(MyAUGraphPlayer));