objective-c - Objective-C 中的 "Invalid application of ' sizeof ' to interface ' 小数 ' in non-fragile ABI"

标签 objective-c sizeof

我正在学习 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/

相关文章:

ios - 如何使用 XMLReader

objective-c - 无法从 Settings.bundle 读取值

c - 我如何告诉 C 中最小信息单元的大小?

c++ - 使用不带括号的 sizeof

c - 具有条件(三元)表达式的运算符 'sizeof'

ios - 检查日历上是否存在事件

ios - 按顺序循环数组并重复

objective-c - 枚举中的复制和自动释放

c - sizeof 运算符在 c 中显示错误的结构大小

c++ - 在 C++ 中查找数组的大小