c++ - 为什么当我在 int main() 之前声明它而不是之后声明它时函数起作用?

标签 c++

我想知道为什么当我在 int main() 之前声明我的函数时,它工作正常但是,当我尝试做一个原型(prototype)并调用它时,我得到一个错误 - function does not take 0 arguments ?

double timeOnHighway(double mileEndingPoint,
                     double mileStartingPoint,
                     double speed);

int main()
{
    cout << timeOnHighway();
    return 0;
}

double timeOnHighway(double mileEndingPoint = 20.0, 
                     double mileStartingPoint = 0.0,
                     double speed = 55.0)
{
    double timeTravel = ((mileEndingPoint - mileStartingPoint) / speed);
    return timeTravel;
}

最佳答案

因为函数(由原型(prototype)声明)不接受 0 个参数。在主函数中,您正在调用一个函数并且不传入任何参数,但编译器只看到原型(prototype),它需要 3 个参数。因此错误。它不知道您稍后将使用可以采用零参数的实现来专门化它。

将默认参数移动到原型(prototype)(以及后来的 .h 文件)将解决问题。

关于c++ - 为什么当我在 int main() 之前声明它而不是之后声明它时函数起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61240085/

相关文章:

c++ - 无法在 QtCreator 中调试应用程序

c++ - solaris (x86) 上std::basic_string 的一些疑惑

c++ - 你如何编译 CodeShark/RippleGen?

c++ - 使用 seekg() C++ 从文件末尾搜索字符

c++ - 使C++全速运行

c++ - 无法使用 std::function 作为参数类型(需要函数指针版本)宁愿像 STL 这样的模板,但它不能推导参数

c++ - 从热键启动时 SendInput 到 Ctrl+C 文本不起作用

C++ 模板显式实例化,模板参数是类模板

c++ - 如何使我的类像 Visual Studio 中的 std::array 和 std::vector 一样易于调试?

c++ - 使用 boost asio 进行多线程 http 处理是否需要线程?