c++ - 函数原型(prototype)返回错误

标签 c++ function prototype

为什么我们必须在 main() 函数之前使用原型(prototype)?

  1. 我在 main() 之后初始化了我自己的函数,并且我指定了返回值的类型和输入参数的类型。为什么我必须在 main() 之前再做一次?

  2. 我以为我可以用函数的原型(prototype)改变返回值的类型和输入参数的类型,但我做不到!我明白了:

    /tmp/ccixLbJm.o: In function 'main': learn.cpp:(.text+0x1c): undefined reference to 'plusValue(double)' collect2: error: ld returned 1 exit status

    之后

    #include <iostream>
    
    using namespace std;
    
    double plusValue(double value);
    
    int main () {           
        cout << plusValue(5.32) << endl;            
    }
    
    
    int plusValue (int value){        
        value++;            
        return value;        
    }
    

那么,如果它不允许我们更改返回值和输入值并且它们在 main() 之后指定的都是相同的,那么我们究竟为什么必须使用这些原型(prototype)?

最佳答案

函数声明与其定义不相等。

double plusValue(double value)

不等于

int plusValue (int value)

代码应该是这样的

#include <iostream>

double plusValue(double value); // function declaration

int main () {
    cout << plusValue(5.32) << endl;
}

double plusValue(double value){ //function definition
    value += 1;
    return value;
}

总结评论,我们必须在使用它之前声明我们的函数。函数声明告诉编译器函数返回值以及参数的数量和类型。没有这些信息,编译器就不知道如何与我们的函数交互(交互意味着将参数传递给堆栈并获取返回值)。还需要函数定义,函数定义是函数实际的可执行体,所以你必须定义它,但不一定要在你声明的文件中定义。您可以在另一个文件或库中定义函数。

如果你不声明一个函数并定义它,编译器会为你隐式声明它,一些编译器需要在使用该函数之前声明(或隐式声明),所以如果你只想定义函数而不用声明它,您必须在使用该函数之前放置定义。

正如 Clliford 所说,将函数声明与其定义分开的真正好处是针对不同的 C/C++ 文件进行单独的编译和过程。

关于c++ - 函数原型(prototype)返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202317/

相关文章:

c++ - 从基类调用指定方法

python - 我如何修改这个函数,以便它使用特定算法打印 1 和它的参数之间的整数?

函数调用中的 C 指针 malloc

javascript - "Array.prototype.slice: ' IE8中这个' is not a JavaScript object"错误

c++ - 如何从 C++ 中的函数返回结构?

c++ - 与 __declspec(dllexport) 一起使用时,Struct 无法采用构造函数

c++ - 如何在 dev-c++ 中链接 mysql?

MySQL:创建返回数组的函数

javascript - 在 Javascript 中如何制作具有可实例化的自定义行为的数组?

javascript - 将 Knockout 验证与 knockout.utils.extend 结合使用