没有成员的课程是否重要?

时间:2009-09-03 09:33:27

标签: iphone cocoa-touch uikit

我有一个只有类方法(实用程序)的类,所以我的界面就像:

@interface MyUtils : NSObject {
}

Xcode不喜欢它并说:

  

警告:struct没有命名成员

所以我必须创建一个无意义的实例变量?我的代码工作得很好,但是......我只是为编译器激活了各种警告。

6 个答案:

答案 0 :(得分:5)

警告本身不是任何方式的错误,误导或错误。你有一个结构,它是空的,而在C中,有一个没有成员的结构是不常见的。您看到警告的事实是,这取决于您与谁交谈。

这是你的问题:Objective-C是使用GCC编译的,GCC是一个带有Objective-C扩展的C编译器。

Objective-C是C的子集。类似地,Objective-C类是C结构的子集。

在Objective C中,在类中没有属性是完全正常的。在C中,在结构中没有成员是很不寻常的。

GCC是一个C编译器。

这是您的警告源自的地方。海湾合作委员会的Objective-C支持不够聪明,无法摆脱这种警告,或者你认为不应该这样做。

在类中没有属性的情况下,通常会删除花括号。但是,这不会消除警告。

如果您不小心创建了一个标准结构(即使在Objective-C代码中),那么您会欣赏这个警告,因为通常意外创建的结构没有成员,并且它会导致许多奇怪的问题。

如果您启用-pedantic进行编译,那么会有一些像这样的警告,并且它们都有扎实的根源。有些像这样,是由于Objective-C和C约定之间的细微差别。其他人是GCC警告您,您的代码可能无法在其他操作系统上编译。有些人认为你永远不应该看到它们,有些人认为这些信息是完全正常的。

如果您使用的是Xcode,我建议您在项目中使用两个目标。一个正常的警告,一个与你的疯狂警告。使用第一个目标进行正常编码。如果您无法在5分钟内识别出错误,请使用第二个目标。有许多教程在Xcode中处理目标。

答案 1 :(得分:2)

不,您不必创建无意义的实例变量,因为它不是错误而是警告。编译器只是发现了一个奇怪的情况并决定警告你(并且只是因为你的自定义警告设置)。

在这种情况下,我会说忽略它(和/或将产生的警告数量降低到更合理的程度)。

答案 2 :(得分:1)

您已选中“迂腐警告”,为编译器设置-pedanticGCC docs仅指发出严格的ISO C和ISO C ++对此标志所要求的警告,因此我假设Objective-C正在幕后做一些绊倒警告的事情。取消选中该设置。

答案 3 :(得分:0)

假设你没有做任何奇怪的事情,这听起来像编译器错误。一个类不应该给出结构警告。

答案 4 :(得分:0)

如果缺少实例变量确实是这个警告背后的原因,你是否意识到你可以删除花括号? e.g。

@interface Foo : NSObject
+ (void)fooBar;
@end

看看Cocoa标题,很多类都是这样的。

答案 5 :(得分:0)

  

如果缺少实例变量确实是此警告背后的原因,您是否意识到>你可以删除花括号吗? e.g。

@interface Foo : NSObject
+ (void)fooBar;
@end
  

看看Cocoa标题,很多类都是这样的。

但是你在你的fooBar方法中得到了相同的警告1行。