问一道C++ primer课后习题

小清新爱大光明 2011-11-03 04:29:58
习题4.35,不多说了,直接贴代码:

int main()
{
vector<string> svec;
string str;

while(cin>>str)
{
svec.push_back(str);
}

for(vector<string>::iterator itr = svec.begin(); itr != svec.end(); itr++)
{
cout<<*itr<<endl;
}

char **ptr = new char *[svec.size()];

char **p = ptr;

for(itr = svec.begin(); itr != svec.end(); itr++, p++)
{
*p = new char[(*itr).size() + 1];

strcpy(*p,(*itr).c_str());
}

for(vector<string>::size_type ix = 0, p = ptr; ix < svec.size(); ix++, p++)
{
cout<<*p<<endl;
}

return 0;
}

编译后最后的输出语句出错:
D:\test.cpp(64) : error C2040: 'p' : 'unsigned int' differs in levels of indirection from 'char ** '
D:\test.cpp(64) : error C2440: 'initializing' : cannot convert from 'char ** ' to 'unsigned int'

为什么?
...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
modicum_ck 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qq120848369 的回复:]
for(vector<string>::size_type ix = 0, p = ptr

这里错了,不能这么写,for里边初始化只能有一种类类型。
[/Quote]

++
如此美丽的你 2011-11-03
  • 打赏
  • 举报
回复
gai jie tie le
kangyuanxun 2011-11-03
  • 打赏
  • 举报
回复
二楼三楼说的很好了
韦伊 2011-11-03
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
vector<string> svec;
string str;

cout << "Enter strings:(Ctrl+Z to end)" << endl;
while (cin >> str)
{
svec.push_back(str);
}

//创建字符指针数组
char **parr = new char*[svec.size()];

//处理vector元素
int ix = 0;
for (vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter, ++ix)
{
//创建字符数组
char *p = new char[(*iter).size() + 1];
//复制vector元素的数据到字符数组
strcpy(p, (*iter).c_str());
//将指向该字符数组的指针插入到字符指针数组
parr[ix] = p;
}

//输出vector对象的内容
cout << "Conten of vector:" << endl;
for (vector<string>::iterator iter2 = svec.begin(); iter2 != svec.end(); ++iter2)
{
cout << *iter2 << '\t';
}

cout << endl;

//输出字符数组的内容
cout << "Content of character arrays:" << endl;
for (ix = 0; ix != svec.size(); ++ix)
{
cout << parr[ix] << '\t';
}

//释放各个字符数组
for (ix = 0; ix != svec.size(); ++ix)
{
delete [] parr[ix];
}

//释放字符指针数组
delete [] parr;

return 0;
}
JiangXiang 2011-11-03
  • 打赏
  • 举报
回复
作用域啊作用域,
这里的p被当成vector<string>::size_type类型的循环内部局部变量了。
li735937915 2011-11-03
  • 打赏
  • 举报
回复
不多说,楼上2位是 正解.
JieTouLangRen 2011-11-03
  • 打赏
  • 举报
回复
vector<string>::size_type ix = 0, p = ptr
这句的意思相当于int ix=0,p=str;
p显然不是int类型的
而且按照语法推断,这里只能有一种类型
两种类型之间要用“;”隔开,在这里是不可能的
qq120848369 2011-11-03
  • 打赏
  • 举报
回复
for(vector<string>::size_type ix = 0, p = ptr

这里错了,不能这么写,for里边初始化只能有一种类类型。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧