2015-02-20 3 views
1

Привет, я пытаюсь импортировать код, сделанный парнем в visual studio с C++ в gcc в linux. Im получает ошибку в этом фрагменте кода в строке rhs.erase.Ошибка преобразования в std :: remove function

void cleanString(std::string &rhs) { 
    char chars[] = "/-"; 
    for (unsigned int i = 0; i < strlen(chars); ++i){ 
     rhs.erase(std::remove(rhs.begin(), rhs.begin()+3, chars[i]), rhs.begin()+3); 
    } 
} 

Здесь ошибка:

../src/ApplicationMethods.cpp: In function ‘void RetrievalUtil::ApplicationMethods::cleanString(std::string&)’: 
../src/ApplicationMethods.cpp:27:61: error: cannot convert ‘std::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}’ to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)’ 
    rhs.erase(std::remove(rhs.begin(), rhs.begin()+3, chars[i]), rhs.begin()+3); 

Im не эксперт по C++ и любая помощь будет оценена.

ответ

8

Необходимо #include <algorithm>. В противном случае вы не получите нужный std::remove и вместо этого получите функцию от stdio.h, которая удалит файл (и ожидает аргумент const char*).

+0

Спасибо за быстрый ответ, #include заработал! –

+0

@Brian, даже с 'std :: remove', он все еще получает версию' stdio.h'? Или от ''? Это кажется чрезвычайно странным, особенно если вы включаете в себя как '', так и' '. – vsoftco

+0

@vsoftco Мой плохой, я должен был сказать «'. '' должен объявлять свои функции в пространстве имен 'std'. – Brian

Смежные вопросы