我正在学习 Steven Kochan 的“Programming in Objective-C 2.0”。我们创建了一个带有两个 int 实例变量的 Fraction 对象。在本书的后面,Kochan 在 Fraction 对象的指针 myFract 上使用了 sizeof 语句:
sizeof(*myFract)
当我这样做时,我收到一个编译错误:
Invalid application of 'sizeof' to interface 'Fraction' in non-fragile ABI
http://clang.llvm.org/compatibility.html#sizeof-interface指出对于大小可以更改的对象,但 Fraction 实例仅包含两个 int 实例变量(加上书中提到的“继承的 isa 成员”),可能会发生此错误。
我做错了什么?
最佳答案
由于您使用的是现代 ABI,因此对象的大小仍然可能会发生变化。在旧版本的 Objective-C 中,对象基本上是结构体,这意味着可以对它们进行 sizeof() 。现在情况已不再如此,而且从一开始这就不是一个特别好的主意。我不确定 Kochan 试图用它来教什么,但仅供引用,这对于 Objective-C 编程来说不是必需的。您应该能够通过在 Mac 上构建为 32 位来获得旧的行为,但同样,这不是您想要在实际程序中执行的操作。
关于objective-c - Objective-C 中的 "Invalid application of ' sizeof ' to interface ' 小数 ' in non-fragile ABI",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7219319/