【发布时间】:2010-03-16 22:35:11
【问题描述】:
memberA 在 ClassA 的头部定义。
memberB 在 ClassB 的头部定义。
ClassB 是 ClassA 的子类
在 ClassB 的实例中,通过简单的赋值设置 memberA:
memberA = 0.05
...也将 memberB 更改为一个疯狂的数字 - 1028443341。此外,将 0.05 分配给 memberA 会导致 memberA 在调试器中显示为 5.33083531e-38。
两个变量都是浮点数,也不是指针。我几乎肯定会犯一些菜鸟错误,但我不知道它可能是什么。什么样的错误可能会导致为一个变量分配一个值导致两个变量中出现疯狂的值?
********************* 编辑 **********************
我将问题缩小到我为了获取 C++ 成员变量所做的一些“技巧”:
感谢所有想法的人。让像我这样的菜鸟学习这种低级语言是很危险的!这就是问题所在:
@interface LoopyPulser : NSObject{
float _pulseRate;
UInt32 tickInterval;
UInt32 step;
InMemoryAudioFile * audioFilePlayer;
#ifdef __cplusplus
ADSR* env;
StkFrames* audioFrames;
# endif
Pattern * pattern;
float loopLengthRatio;
float volume;
}
我在 SO 的其他地方读到了这个 #ifdef __cplusplus 业务,作为在头文件中导入 C++ 的一种方式,然后由 Obj-C 文件导入。现在在我看来,这是一个可怕的想法,而且很可能是我疯狂的错误的原因。如果我删除#ifdef __cplusplus 中的成员变量,那么精神错乱就会消失。
那么在 Obj-C++ 中拥有 C++ 成员变量的最佳方式是什么?我可以使用 id 吗?
【问题讨论】:
-
我认为
A和B的一组类定义仍然可以重现问题将是一个好主意。问题中的英文描述往往无法传达必要的细节。 -
另外知道您使用的编译器和调试器会有所帮助,也可能是它们无法正常工作
-
是的,我认为源代码示例对于在这种情况下确定可能的解决方案至关重要。
-
复制了您所描述的内容,这里没有问题。是时候找一些来源了。
-
我最初没有包含源代码,因为这看起来很奇怪,很可能简化版本可以正常工作。我敢打赌,如果我简化,我将无法重现它。我会慢慢简化,直到我弄清楚它是什么,或者它足够简单,可以在这里发帖。祝我好运!
标签: c++ objective-c