C ++默认参数 - 声明

时间:2013-03-23 20:34:15

标签: c++ default-arguments

我在班上创建了一个函数。我将所有声明放在我的头文件中,并将所有定义放在我的.cpp。

在我的标题中:

class FileReader{

public:
FileReader(const char*);                        //Constructor
std::string trim(std::string string_to_trim, const char trim_char = '=');

};

在我的 .cpp

std::string FileReader::trim(std::string string_to_trim, const char trim_char = '='){

std::string _return;
for(unsigned int i = 0;i < string_to_trim.length();i++){
    if(string_to_trim[i] == trim_char)
        continue;
    else
        _return += string_to_trim[i];
}

       return _return;
}

每当我尝试编译并运行它时,我都会遇到两个错误。

  

错误:为'std :: string FileReader :: trim(std :: string,char)'[-fpermissive]

的参数2给出的默认参数      

错误:在'std :: string FileReader :: trim(std :: string,char)'[-fpermissive]

之前的规范之后

我做错了什么?我只是希望我的函数有这个默认参数。

2 个答案:

答案 0 :(得分:13)

您不应在函数声明和函数定义中指定默认参数 both 。我建议你把放在声明中。例如:

class FileReader{
public:
    FileReader(const char*);                        
    std::string trim(std::string string_to_trim, const char trim_char = '=');
    //                                                                ^^^^^
    //                                                     Here you have it
};

std::string FileReader::trim(std::string string_to_trim, const char trim_char)
//                                                                  ^^^^^^^^^
//                                              So here you shouldn't have it
{
    // ....
}

如果函数定义和函数声明对于编译器从进行函数调用的位置都是可见的,那么您还可以选择仅在函数定义中指定默认参数 ,这也可以。

但是,如果编译器只能看到函数的声明,那么您必须在函数声明中指定默认参数 ,然后删除它们来自功能定义。

答案 1 :(得分:6)

在cpp内部,您不需要默认参数,只能在h文件中