我尝试使用GCC的-fconstant-string-class
选项在Linux上实现自己的字符串类。我班级的布局如下
@interface String : RootObject //my root object class; it is essentially NSObject
{
char *c_string;
unsigned int len;
}
这正是GCC tells me to implement this(isa
ivar从RootObject
类继承)的方式,但是当我尝试使用字符串文字(@"foo"
)时, GCC在编译时给出了以下错误
error: interface String does not have a valid constant string layout
Google搜索给了我this link,但好像提问者从未解决过他的问题。该类包含的唯一其他ivar是从超类继承的volatile int retainCount
。
答案 0 :(得分:1)
retainCount
ivar未包含在您引用的规范中。 GNU's Object
class doesn't have it,并注意在Cocoa中,它来自与GNU的ObjC库相同的NeXTian,-retainCount
is part of the NSObject
protocol,而不是类。
这可能是您的问题,因为从您的根类继承它会将其放在c_string
和len
字段之前,从而搞砸了预期的布局。
删除它应该允许它工作。