C++primer中文版第四版问题求教
习题9.28
- C/C++ code
#include<iostream>#include<vector>#include<list>#include<deque>#include<string>#include<cctype>using namespace std;//9.28int main(){ char* sa[]={"mary","tom","bob","alice"}; list<char*> slst(sa,sa+4); vector<string>svec; string str; svec.assign(slst.begin(),slst.end()); for(list<char*>::iterator lit=slst.begin();lit!=slst.end();++lit) cout<<*lit<<" "; cout<<endl; return 0; }报错如下:
error C2664: 'void __thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::a
llocator<char> > > >::assign(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)' : cannot convert parameter
1 from 'class std::list<char *,class std::allocator<char *> >::iterator' to 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Error executing cl.exe.
求高人指点!先谢了哈!
[解决办法]
问题在于不存在从list<char*>的迭代器到vector<string>迭代器的隐式转换,把sa的元素类型改为string就可以了
[解决办法]
漏了,还需要把list<char*>改为list<string>
[解决办法]
把list<char*> 改成list<string>就行了
[解决办法]
vs2008,dev都OK
[解决办法]
很明显,楼主是VC6,。
[解决办法]
改成下面这样就行了
#include<iostream>
#include<vector>
#include<list>
#include<deque>
#include<string>
#include<cctype>
using namespace std;
//9.28
int main()
{
char* sa[]={"mary","tom","bob","alice"};
list<char*> slst(sa,sa+4);
vector<string>svec;
string str;
for(list<char*>::iterator it = slst.begin(); it != slst.end(); it++) {
svec.push_back(*it);
}
for(list<char*>::iterator lit=slst.begin();lit!=slst.end();++lit)
cout<<*lit<<" ";
cout<<endl;
return 0;
}
[解决办法]
no problem