假设您的代码库中有一个函数 X()。它需要三个参数。原型(prototype)看起来像这样:
在头文件中:
void X(string a, int b, string c);
在 .cpp 文件中:
void myclass::X(string a, int b, string c) {
...
}
假设您正在向代码库中添加内容,并且特别需要传递第四个参数 到 X 只有一个地方。 3 参数调用都需要保留在原位。您希望避免破坏对 X 调用的所有 3 参数版本。
我已经尝试使用建议 here但这不起作用。答案一仍然产生找不到匹配函数的错误。尝试执行 answer 2 suggestions 会产生错误,我无法重载该函数。具体来说,我根据该链接中的答案 2 尝试这样做:
在头文件中:
void X(string a, int b, string c, string d);
void X(string a, int b, string c, string d="default_value");
非常感谢任何有关如何在不破坏所有 3 参数调用的情况下正确添加单个 4 参数调用的建议 - 谢谢!
最佳答案
只需添加一个新的原型(prototype),保持之前的原型(prototype)不变:
string X(string a, int b, string c);
string X(string a, int b, string c, string d);
您不能为新参数分配默认值,因为这会导致歧义:编译器不可能知道您要调用哪个方法。
或者您可以用一个新的定义替换旧的定义,采用一个额外的参数,并为其设置一个默认值。但在这种情况下,您必须删除之前的函数声明。
提示:
根据你的语法,我认为你正在使用
using namespace std;
在你的标题中。这是不好的做法。这样做会在您包含此 header 的任何地方使用 std 命名空间填充全局命名空间。您应该删除此指令并限定您的类型:std::string
而不是 string
关于用于添加默认参数的 C++ 特定语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8496113/