Ошибка компилятора оператора C ++ - PullRequest
0 голосов
/ 28 мая 2011

в моей программе есть оператор, который выполняет сравнение элементов двух векторов

 if(!*(it2+3).compare(*(lines_in_file.begin())))

полученная мной ошибка компилятора:

test_file.cpp:140: error: 'class __gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >' has no member named 'compare'

it2 'тип s:

vector<std::string>::iterator it2=rec_vec.begin();

lines_in_file тип:

vector<std::string> lines_in_file=split(argv[2],',');

объявление функции разделения:

std::vector<std::string> split(const std::string &s, char delim)

Я запутался немного. Уже потраченомного времени на размышления.Может ли кто-нибудь помочь, пожалуйста?

Ответы [ 4 ]

4 голосов
/ 28 мая 2011

Это происходит потому, что оператор . имеет более высокий приоритет , чем оператор *. Используйте это:

if(!(it2+3)->compare(*(lines_in_file.begin())))

или это

if(!(*(it2+3)).compare(*(lines_in_file.begin())))

(которые равны)

4 голосов
/ 28 мая 2011

Проблема в том, что оператор "."имеют больший приоритет, чем «*», поэтому это должно решить проблему.

if(!(*(it2+3)).compare(*(lines_in_file.begin())))
1 голос
/ 28 мая 2011

Оператор * применяется к результату

(it2+3).compare(*(lines_in_file.begin()))

Это не то, что вы хотите. Просто используйте ():

(*(it2+3)).compare(*(lines_in_file.begin()))
1 голос
/ 28 мая 2011

Приоритет оператора доступа к элементу (.) на выше, чем приоритет оператора косвенного обращения (*).Таким образом, ваш код интерпретируется как:

if(!*( (it2+3).compare( *(lines_in_file.begin()) ) ))

Отсюда и ошибка.(дополнительные пробелы добавлены для ясности)

Итак, исправление таково:

if(! ( *(it2+3) ).compare( *(lines_in_file.begin()) ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...