为什么编译器坚持方法 returns a "void" 而头文件声明方法 returns a float?
Why does the compiler insists a method returns a "void" when the header file claims the method returns a float?
对象的 class 接口声称其实例变量之一的访问器 returns 数据类型 "float." 但是,当我尝试编译脚本以访问这个变量,编译器抛出以下错误:"Initializing 'float' with an expression of incompatible type 'void.'" 实现代码是专有的,对我隐藏。最后一条数据是,当单步执行调试器时,调试器能够访问该方法并坚持 returned 值的类型为 "float!"
方法是否可以 return 与接口中描述的数据类型不同的数据类型?我怎样才能找出这个方法真正的 returns?关于为什么编译器、调试器和头文件似乎不一致的任何建议?
在对象的头文件中,您可以看到接口声明访问器 returns "float" :
@interface SBPulseTag : SBTag {
@private
float start,end;
enum PulseTypeEnum pulseType;
}
- (float)start;
- (float)end;
- (void)setStart:(float)val;
- (void)setEnd:(float)val;
@end
在我自己的代码中,我有一个通过“PulseTag”的 NSArray 进行枚举的方法,就像这样。
-(WaveformSegment *) WaveformSegmentTest:(int)myInput {
// <... Some overlying code...>
SBPulseTag *tag; // Declare an object to receive each object in the array
while(tag = [enumerator nextObject]) { // Loop through the array
int tmp = [tag start]; // Initializing 'float' with an expression of incompatible type 'void.'
}
最后,XCode 调试器可以清楚地访问 [tag start] 并将其作为浮点数读取。这是 XCode:
中调试器输出的快照
有什么想法吗?我很困惑。
几乎可以肯定,您未能将 SBPulseTag
的 header 文件导入此 .m
文件。
在无法看到 header 的情况下,ObjC 假定此方法 returns void
(因为还有其他选择器称为 -start
return void
;此方法不应该被调用 start
,但您无法控制它)。我怀疑你在某个地方包含了 @class SBPulseTag
,所以它知道 class 存在,但不知道它的界面。
确保检查是否有任何其他警告。您可能还有编译器警告您的其他冲突。
对象的 class 接口声称其实例变量之一的访问器 returns 数据类型 "float." 但是,当我尝试编译脚本以访问这个变量,编译器抛出以下错误:"Initializing 'float' with an expression of incompatible type 'void.'" 实现代码是专有的,对我隐藏。最后一条数据是,当单步执行调试器时,调试器能够访问该方法并坚持 returned 值的类型为 "float!"
方法是否可以 return 与接口中描述的数据类型不同的数据类型?我怎样才能找出这个方法真正的 returns?关于为什么编译器、调试器和头文件似乎不一致的任何建议?
在对象的头文件中,您可以看到接口声明访问器 returns "float" :
@interface SBPulseTag : SBTag {
@private
float start,end;
enum PulseTypeEnum pulseType;
}
- (float)start;
- (float)end;
- (void)setStart:(float)val;
- (void)setEnd:(float)val;
@end
在我自己的代码中,我有一个通过“PulseTag”的 NSArray 进行枚举的方法,就像这样。
-(WaveformSegment *) WaveformSegmentTest:(int)myInput {
// <... Some overlying code...>
SBPulseTag *tag; // Declare an object to receive each object in the array
while(tag = [enumerator nextObject]) { // Loop through the array
int tmp = [tag start]; // Initializing 'float' with an expression of incompatible type 'void.'
}
最后,XCode 调试器可以清楚地访问 [tag start] 并将其作为浮点数读取。这是 XCode:
中调试器输出的快照有什么想法吗?我很困惑。
几乎可以肯定,您未能将 SBPulseTag
的 header 文件导入此 .m
文件。
在无法看到 header 的情况下,ObjC 假定此方法 returns void
(因为还有其他选择器称为 -start
return void
;此方法不应该被调用 start
,但您无法控制它)。我怀疑你在某个地方包含了 @class SBPulseTag
,所以它知道 class 存在,但不知道它的界面。
确保检查是否有任何其他警告。您可能还有编译器警告您的其他冲突。