2012-12-21 157 views
0

我正在写我的对象的第一个应用程序,我不明白为什么编译器给我的错误。 (但对于int代码的作品...)浮点函数返回值

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 


     // 1st var 
     NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f)); 

    } 
    return 0; 
} 
float res (float a, float b, float c) 
{ 
    float res=a+b+c; 
    return res; 
} 
+1

什么是编译器给你的错误信息? –

+1

在第一次被调用之前不应该声明functin吗? –

回答

4

尝试前主声明res,这样,当它创立它main它是已知的编译器。如果不事先声明它,会发生什么情况是:

  1. 编译器首先在main体遇到res;

  2. 它根据resmain内部调用的方式推断出的结果构成res的“隐式声明”;这意味着根据C约定,返回类型为int;

  3. 当稍后发现真实res时,推断签名(即返回类型)和实际签名之间的不匹配会触发编译错误。

要解决这个问题:

float res (float a, float b, float c); 

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 

    // 1st var 
    NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f)); 
    } 
    return 0; 
} 

float res (float a, float b, float c) 
{ 
    float res=a+b+c; 
    return res; 
} 
+0

哦!谢谢!那是我的魔杖!现在很明显。 –

0

尝试:

#import <Foundation/Foundation.h> 

float res (float a, float b, float c) 
{ 
    float res=a+b+c; 
    return res; 
} 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 


     // 1st var 
     NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f)); 

    } 
    return 0; 
} 
1

你只是忘记申报功能,只是把

float res (float a, float b, float c); 

之前你int main

希望它可以帮助你!