vector *vec=new vector(a);

IMCNS 2012-11-29 10:44:56
char* a="sth";
vector<char*> *vec=new vector<char*>(a);

编译显示:
“std::vector<_Ty>::vector(const std::allocator<_Ty> &)”: 不能将参数 1 从“char *”转换为“const std::allocator<_Ty> &”
with
[
_Ty=char *
]
原因如下: 无法从“char *”转换为“const std::allocator<_Ty>”
with
[
_Ty=char *
]
无构造函数可以接受源类型,或构造函数重载决策不明确


请问是什么原因?

另外求一本详细的也许是数据结构还是什么的书,
主要我现在很多
类似:
char* a="sth";
vector<char*> *vec=new vector<char*>(a);
这种出错却不知道什么原因,
还有char级别的一些东西感学很混淆
char * a="hello";
cout <<a<<endl;
cout <<*a<<endl;
这种我也不知道为何cout <<a显示hello ,cout <<*a显示h,指针难道不是显示地址的吗?为什么到了char上就会显示字符了?那这字符的地址改怎么表示?

像这种我感觉就是我的基础只是不扎实,一些底层的东西原因不知道,比如数据的内存是怎么分布的,
之类的..还有一些什么堆啊`践啊,详细点的书有吗?请各位帮指点下迷津,C++primer也快学到头了,但总感觉一些数据处理起来很陌生,小生谢过各位前辈了!
...全文
269 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
纱织 2012-11-29
  • 打赏
  • 举报
回复
要输出指针的值的话 用以下语句即可

char * a="hello";
//下面调用的都是ostream & operator<<(unsigned &)函数
cout<<(unsigned)a<<endl;//输出字符串"hello"首地址(十进制)
cout<<hex<<(unsigned)a<<endl;//输出字符串"hello"首地址(十六进制)
cout<<oct<<(unsigned)a<<endl<<;//输出字符串"hello"首地址(八进制)
叁叁玖玖 2012-11-29
  • 打赏
  • 举报
回复
第一个,错误提示应该比较清楚了;vector 不支持 char* 类型。 char * a="hello"; 第二个,a 是一个指针,为hello字符串的首地址,*a是指针指向的值.
纱织 2012-11-29
  • 打赏
  • 举报
回复
数据结构跟你的问题关系不大。数据结构主要内容是线性表、栈、队列、树、图、排序、检索等。 你所说的堆、栈,应该是动态存储区里的栈区和堆区。系统分配给用户的存储空间分为程序区、静态存储区、动态存储区。程序区存放程序中各函数的代码块。静态存储区存放全局数据和静态数据。动态存储区分为栈区和堆区。栈区存放非静态局部变量,比如函数中的auto类型变量。堆区存放与指针相关的动态数据,用new运算符分配的内存就是从堆中申请的。 你的主要问题是C++的知识掌握得不扎实,还是认真看看C++的教科书,把C++的语法搞明白吧。 看哪本书其实不重要,把手上现有的教材学好就行。 我建议仔细研读书上的例子,对于重要的例子要能在再不看书的情况下,自己在编译器里写出来。 关于数据的内存是怎么分布的,如果能把变量的存储期、作用域方面的知识掌握好,再学好指针,顺便了解一下内存动态分配的机制,相信你在这方面的大多数疑问都可以得到答案。 学好C++,然后可以学数据结构,数据结构对于提高编程水平的帮助是很大的。
mymtom 2012-11-29
  • 打赏
  • 举报
回复

vector<char*> *vec=new vector<char*>(1, a);
vector构造函数 default (1) explicit vector (const allocator_type& = allocator_type()); fill (2) explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& = allocator_type()); range (3) template <class InputIterator> vector (InputIterator first, InputIterator last, const allocator_type& = allocator_type()); copy (4) vector (const vector& x);
纱织 2012-11-29
  • 打赏
  • 举报
回复
第一个问题,即
vector<char*> *vec=new vector<char*>(a); 
需要看看定义类模板的代码才能帮你判断 第二个问题,C++语言对运算符“<<”进行了重载
char * a="hello";
cout <<a<<endl;\\调用函数 ostream & operator<<(char *),输出a指向的字符串"hello"
cout <<*a<<endl;\\调用函数 ostream & operator<<(char &),输出字符(*a)的值,即'h'
  • 打赏
  • 举报
回复
还是把基础打扎实了再来看这本书
  • 打赏
  • 举报
回复
还有char级别的一些东西感学很混淆 char * a="hello"; cout <<a<<endl; cout <<*a<<endl; 这种我也不知道为何cout <<a显示hello ,cout <<*a显示h,指针难道不是显示地址的吗?为什么到了char上就会显示字符了?那这字符的地址改怎么表示? ----------------------------------------------------- cout <<*a<<endl; a本来就是一个指针咯,指向hello这个字符串的第一字符h,你用*a其实就是取的第一个字符。
纱织 2012-11-29
  • 打赏
  • 举报
回复
C++语言对运算符“<<”进行了重载 如执行下面这条语句时
cout<<x;
编译器将根据参数x的类型调用相应的重载函数 若x为char*型,下面的语句将调用ostream & operator<<(char *)函数,输出x指向的字符和存储在该字符后面的所有字符,直到遇到'\0'结束。
char* x = "hello";
cout<<x;
又如

char* x = "hello";
unsigned a = (unsigned)x;
cout<<a;
上面的语句先将指针强制转换成unsigned int类型,然后调用ostream & operator<<(unsigned &)函数,输出变量a的值

64,654

社区成员

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

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