C++ C++;用于添加默认参数的特定语法
假设您的代码库中有一个函数X()。这需要三个论点。原型如下所示: 在头文件中:C++ C++;用于添加默认参数的特定语法,c++,function,arguments,default-value,C++,Function,Arguments,Default Value,假设您的代码库中有一个函数X()。这需要三个论点。原型如下所示: 在头文件中: void X(string a, int b, string c); void X(string a, int b, string c, string d); void X(string a, int b, string c, string d="default_value"); 在.cpp文件中: void myclass::X(string a, int b, string c) { ... } 假
void X(string a, int b, string c);
void X(string a, int b, string c, string d);
void X(string a, int b, string c, string d="default_value");
在.cpp文件中:
void myclass::X(string a, int b, string c) {
...
}
假设您正在添加代码库,并且特别需要传递第四个参数
只在一个点上移动到X。3参数调用都需要保持不变。您希望避免破坏对X的所有3参数版本的调用
我试过使用这个建议,但不起作用。答案1仍然生成未找到匹配函数的错误。尝试执行回答2建议会产生错误,我无法使函数过载。具体来说,我根据该链接中的答案2来尝试:
在头文件中:
void X(string a, int b, string c);
void X(string a, int b, string c, string d);
void X(string a, int b, string c, string d="default_value");
对于如何在不中断所有3参数调用的情况下正确添加单个4参数调用的任何建议,我们将不胜感激-谢谢 只需添加一个新的原型,保持前一个原型不变:
string X(string a, int b, string c);
string X(string a, int b, string c, string d);
不能为新参数指定默认值,因为这会导致歧义:编译器可能不知道要调用哪些方法
或者,您可以使用一个新的定义替换旧的定义,使用一个额外的参数,并为此设置默认值。但是在这种情况下,必须删除前面的函数声明
提示:
根据你的语法,我认为你在使用
using namespace std;
在你的头上。这是个坏习惯。这样做会在包含此标头的任何位置使用std命名空间填充全局命名空间。您应该删除此指令,而不是限定您的类型:
std::string
而不是string
只需添加一个新原型,保持前一个原型不变:
string X(string a, int b, string c);
string X(string a, int b, string c, string d);
不能为新参数指定默认值,因为这会导致歧义:编译器可能不知道要调用哪些方法
或者,您可以使用一个新的定义替换旧的定义,使用一个额外的参数,并为此设置默认值。但是在这种情况下,必须删除前面的函数声明
提示:
根据你的语法,我认为你在使用
using namespace std;
在你的头上。这是个坏习惯。这样做会在包含此标头的任何位置使用std命名空间填充全局命名空间。您应该删除此指令,而不是限定您的类型:
std::string
而不是头文件中的string
,您需要有两个函数
void string X(string a, int b, string c);
void string X(string a, int b, string c, string d);
这样,使用三个参数调用X的所有代码段都不会中断,并且将调用使用四个参数调用X的单个位置(即,调用相应的重载函数)。在头文件中,您需要有两个函数
void string X(string a, int b, string c);
void string X(string a, int b, string c, string d);
这样,使用三个参数调用X的所有代码段都不会中断,并且将调用使用四个参数调用X的单个位置(即调用相应的重载函数)。您只需要头文件中的第二个定义。这两种情况都存在是造成过载错误的原因
void string X(string a, int b, string c, string d="default_value");
意味着,当给出4个值时,使用提供的d,当只给出3个值时,将d设置为“默认值”。您只需要头文件中的第二个定义。这两种情况都存在是造成过载错误的原因
void string X(string a, int b, string c, string d="default_value");
意味着,当给出4个值时,使用提供的d,当仅给出3个值时,将d设置为“默认值”。此示例以最大警告级别编译:
#include <iostream>
#include <string>
void foo(std::string , int , std::string , std::string d="default_value")
{
std::cout<<"d="<<d<<std::endl;
}
int main() {
foo("param1",55,"param2");
}
#包括
#包括
void foo(std::string,int,std::string,std::string d=“默认值”)
{
std::cout此示例以最大警告级别编译:
#include <iostream>
#include <string>
void foo(std::string , int , std::string , std::string d="default_value")
{
std::cout<<"d="<<d<<std::endl;
}
int main() {
foo("param1",55,"param2");
}
#包括
#包括
void foo(std::string,int,std::string,std::string d=“默认值”)
{
std::coutvoid string X
?这是什么意思?@AusCBloke+1让我们看看其他答案什么时候会被编辑;-)剪切粘贴错误-我是法律盲。修复。void string X
?这是什么意思?@AusCBloke+1让我们看看其他答案什么时候会被编辑;-)剪切粘贴错误-我是法律盲。修复。呵呵当使用3个参数调用时,编译器会选择使用哪个函数吗?很抱歉,当我输入错误的问题中复制粘贴时。当使用3个参数调用时,编译器会如何选择使用哪个函数?很抱歉,当使用输入错误的问题中复制粘贴时。实际上,我创建了一个任意函数定义,并且是随机的选择它是为了获取字符串类型的参数。实际上,这是一个具有嵌套名称空间的复杂代码库。但我将来确实会小心污染/使用名称空间。谢谢!实际上,我创建了一个任意函数定义并随机选择它来获取字符串类型的参数。实际上,这是一个复杂的代码库th嵌套的名称空间。但我将来确实会小心污染/使用名称空间。谢谢!