C++搞砸了:强制可选参数是强制性的

CaT*_*aTx 0 c++ optional-arguments

我想要一个带可选参数的函数.但是,VC++抛出了一个我无法理解的错误.代码简单如下:

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

void myFunction(string something, int w);

int main()
{
    myFunction("a string");

    int a = 1;
}

void myFunction(string something, int w = 5)
{
    cout << something << " - " << w << endl;
}
Run Code Online (Sandbox Code Playgroud)

它抱怨说:

'myFunction': function does not take 1 arguments
Run Code Online (Sandbox Code Playgroud)

但是,如果我在main()之前移动myFunction(),它不会给出错误.到底是怎么回事?请帮忙.谢谢.

gsq*_*dxc 6

此错误是因为您在调用函数时有可选变量,但在声明中没有.

这将创建一个包含两个变量的函数:

void myFunction(string something, int w);
Run Code Online (Sandbox Code Playgroud)

但是,这会使第二个变量成为可选:

void myFunction(string something, int w=5);
Run Code Online (Sandbox Code Playgroud)

您需要使声明具有可选变量.

此外,我很惊讶您的编译器没有尝试吐出与重新定义相关的某种错误.(这甚至可能是一个编译器错误!我将更新研究. 更新:似乎不是编译器错误,但绝对是我希望拥有的功能.即使它是一个错误,它将与链接器相关. )