2

クラスで関数を作成しました。すべての宣言をヘッダーファイルに入れ、すべての定義を.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;
}

コンパイルして実行しようとすると、2つのエラーが発生します。

エラー:'std :: string FileReader :: Trim(std :: string、char)'[-fpermissive]のパラメータ2にデフォルトの引数が指定されています

エラー:'std :: string FileReader :: Trim(std :: string、char)'[-fpermissive]の以前の指定の後

私は何が間違っているのですか?関数にこのデフォルトの引数を持たせたいだけです。

4

2 に答える 2

15

関数宣言と関数定義の両方でデフォルトの引数を指定しないでください。宣言にのみ入れることをお勧めします。例えば:

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
{
    // ....
}

関数定義と関数宣言の両方が、関数呼び出しが行われている時点からコンパイラーに表示される場合は、関数定義でのみデフォルトの引数を指定するオプションもあり、それも同様に機能します。

ただし、関数の宣言のみがコンパイラに表示される場合は、関数宣言でのみデフォルトの引数を指定し、それらを関数定義から削除する必要があります。

于 2013-03-23T20:35:42.090 に答える
9

cpp内では、デフォルトのパラメータは必要ありません。hファイルのみです。

于 2013-03-23T20:36:25.763 に答える