奇怪的C编译问题
发布时间:2020-12-16 10:27:24 所属栏目:百科 来源:网络整理
导读:我有以下C代码: typedef istream_iteratorstring isi;// (1)vectorstring lineas(isi(cin),isi());// (2)//vectorstring lineas;//copy(isi(cin),isi(),back_inserter(lineas));typedef vectorstring::iterator vci;for (vci it = lineas.begin(); it != li
我有以下C代码:
typedef istream_iterator<string> isi; // (1) vector<string> lineas(isi(cin),isi()); // (2) //vector<string> lineas; //copy(isi(cin),isi(),back_inserter(lineas)); typedef vector<string>::iterator vci; for (vci it = lineas.begin(); it != lineas.end(); ++it) cout << *it << endl; 但是,我在编译时遇到错误: test.cpp: In function 'int main(int,char**)': test.cpp:16: error: request for member 'begin' in 'lineas',which is of non-class type 'std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::allocator<char> > > >(main(int,char**)::isi,main(int,char**)::isi (*)())' test.cpp:16: error: request for member 'end' in 'lineas',char**)::isi (*)())' 但是,如果我用(2)替换(1),它就会编译. 我正在使用g 4.4.0 怎么了? 解决方法
编译器和您正在以不同方式解释此行:
vector<string> lineas( isi(cin),isi() ); 为您定义并初始化vector< string>类型的变量lineas.使用带有两个迭代器的构造函数. 对于编译器,您要定义一个返回向量< string>的函数行.并且取两个参数,第一个是isiand,第二个参数是一个不带参数的函数并返回一个isi …随着时间的推移,你将习惯于阅读编译器错误以及从代码中读取的内容. 最简单的解决方案是添加一对额外的括号: vector<string> lineas( (isi(cin)),isi() ); 您可以在C FAQ Lite here中找到更长的解释. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |