Это приводит меня к стене.Удаление алфавитного символа из строки C++
template<typename t>
void Tree<t>::readFromFile(string filename)
{
//
str.erase(remove_if(str.begin(), str.end(), aZCheck), str.end());
//
}
template<typename t>
bool Tree<t>::aZCheck(char c)
{
if (isalpha(c))
return false;
else return true;
}
дает ошибку: cannot convert 'Tree<t>::aZCheck<std::basic_string<char> >' from type 'bool (Tree<std::basic_string<char> >::)(char)' to type 'bool (Tree<std::basic_string<char> >::*)(char)'|
работал хорошо, пока я не переехал обоих методов в классе.
str.erase(remove_if(str.begin(), str.end(), isalpha), str.end());
Doesnt работа без использования статического актерский, и я использую cctype или ctype.h библиотеки, статические литая для C++ локали библиотеки, которые я не использую.
Я могу заставить его работать с использованием статического литья, но тогда я не могу сделать его отрицательным !isalpha
. Поскольку мне нужно удалить несимвольные символы и как есть, он удалит буквенные символы. Заставляя меня создавать отдельный метод, о котором я упоминал в качестве своей первой проблемы. И это сработало, пока я не переместил метод в класс.
Скорее всего, я что-то совершенно очевидно, не хватает, но я просто не могу понять это ...
хорошо читать [ссылка] (http://yosefk.com/c++fqa/function.html) – 101010
@ 40two FQA не был обновлен для C++ 11, я вижу. Обновленный ответ на 33.10, который использует lambdas C++ 11, может быть уместным здесь, если было бы невозможно обновить 'aZCheck', чтобы быть статичным. – hvd