Я создал функцию в своем классе. Я поместил все мои объявления в мой заголовочный файл и все мои определения в моем .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]
Что я делаю неправильно? Я просто хочу, чтобы моя функция имела этот аргумент по умолчанию.
Вы не должны указывать аргумент по умолчанию и то и другое в объявлении функции и в определении функции. Я предлагаю вам положить его только в декларации. Например:
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
{
// ....
}
Если и определение функции, и объявление функции видны компилятору с точки, где выполняется вызов функции, у вас также будет возможность указать аргументы по умолчанию только в определении функции, и это бы сработало.
Однако, если только декларация функции видна компилятору, тогда вам нужно будет указать аргумент по умолчанию только в объявлении функции, и удалите их из определения функции.
внутри cpp вам не нужен параметр по умолчанию, только в файле h