Аргументы C ++ по умолчанию — Декларация

Я создал функцию в своем классе. Я поместил все мои объявления в мой заголовочный файл и все мои определения в моем .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]

ошибка: после предыдущей спецификации в ‘std :: string FileReader :: trim (std :: string, char)’ [-fpermissive]

Что я делаю неправильно? Я просто хочу, чтобы моя функция имела этот аргумент по умолчанию.

1

Решение

Вы не должны указывать аргумент по умолчанию и то и другое в объявлении функции и в определении функции. Я предлагаю вам положить его только в декларации. Например:

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

Если и определение функции, и объявление функции видны компилятору с точки, где выполняется вызов функции, у вас также будет возможность указать аргументы по умолчанию только в определении функции, и это бы сработало.

Однако, если только декларация функции видна компилятору, тогда вам нужно будет указать аргумент по умолчанию только в объявлении функции, и удалите их из определения функции.

13

Другие решения

внутри cpp вам не нужен параметр по умолчанию, только в файле h

6

По вопросам рекламы [email protected]