【问题标题】:Compiler warning "assignment from distinct objective-c type"编译器警告“来自不同目标 c 类型的赋值”
【发布时间】:2010-10-06 08:36:44
【问题描述】:

我正在学习 Objective-c,阅读 Aaron Hillegass 的书“Mac OS X 的 Cocoa 编程 - 第三版”。我正在使用 Xcode 开发一些示例代码,并在此方法的最后一行不断收到编译器警告:

- (void) setEntryDate:(NSCalendarDate *) date {
    [date retain];
    [entryDate release];
    entryDate = date;
}

警告内容为“警告:来自不同 Objective-C 类型的赋值”。是什么导致了这个警告?如何防止它再次发生?

它似乎不影响程序的执行,但我不明白问题是什么,或者即使真的有问题(这可能只是一个偏执的编译器?)。

【问题讨论】:

  • entryDate的声明在哪里?你这里少了一块……
  • entryDate 在头文件中声明。
  • 问题实际上是在问“entryDate 的声明是什么?”
  • 来自头文件:@interface LotteryEntry : NSObject { NSCalendar *entryDate; }

标签: objective-c xcode macos


【解决方案1】:

NSCalendar 和 NSCalendarDate 确实是不同的类型。你应该决定你希望 entryDate 是哪一个(可能是 NSCalendarDate,根据“日期”的事情来判断)。

【讨论】:

  • 知道了。为什么编译器会警告我这个?它只是对多态性有道德上的反对吗?
  • 这就是静态类型声明的意义——说,“我在这里期待这种类型,所以如果我有别的东西,请警告我。”
  • 一个更好的问题是为什么您希望 NSCalendar 和 NSCalendarDate 具有相同的角色。他们有不同的目的和不同的方法。这似乎几乎可以肯定是一个错误,这就是编译时类型检查很有用的原因。你这样做是有原因的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多