C++语句编译器错误

C++ statement compiler error

本文关键字:错误 编译器 语句 C++      更新时间:2023-10-16

我的程序中有一条语句,它对两个向量的元素进行比较

 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的类型为:

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)

我有点困惑。我已经花了很多时间思考了。有谁能帮忙吗?

问题是运算符"."的优先级高于"*",所以这应该可以解决问题。

if(!(*(it2+3)).compare(*(lines_in_file.begin())))
这是因为.运算符的优先级高于*运算符。使用此:
if(!(it2+3)->compare(*(lines_in_file.begin())))

或者这个

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

(相等)

将*运算符应用于的结果

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

这不是你想要的。只需使用():

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

成员访问运算符(.)的优先级高于间接运算符(*)的优先级。因此,您的代码被解释为:

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

因此出现了错误。(为了清晰起见,增加了额外的空格)

因此,解决方案是:

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