新手问题,为什么Vector的Push_back失败

littlestone08 2012-03-24 08:07:33
http://topic.csdn.net/u/20120324/18/840a45e6-3d2e-4cc7-9e68-f4f8a606aa92.html?seed=1431822837&r=78015052#r_78015052

#include <iostream> #include <vector> using namespace std; typedef struct tagSn { char m_Data[10]; public: tagSn() { memset(m_Data, 0, sizeof(m_Data)); } tagSn(const tagSn& value) { tagSn(value.m_Data); } tagSn& operator=(const tagSn& value) { if (&value != this){ memcpy(m_Data, value.m_Data, sizeof(m_Data)); } return (*this); } tagSn(const void* ptr) { if (ptr != m_Data) memcpy(m_Data, ptr, sizeof(m_Data)); } tagSn& operator=(void* ptr) { if (ptr != m_Data) memcpy(m_Data, ptr, sizeof(m_Data)); return (*this); } bool operator==(const tagSn& value) { return (memcmp(m_Data, value.m_Data, sizeof(m_Data)) == 0); } ; bool operator!=(const tagSn& value) { return (!(*this == value)); } } Sn; typedef vector<Sn> Sn_List; int main() { Sn_List List; string Str; char * ptr_c = NULL; Sn b = "1111111111"; Str.assign(b.m_Data, 10); cout << Str << endl; ///正常输出 List.push_back(b); Sn_List::iterator itor = List.begin(); while (itor < List.end()) { Str.assign((*itor).m_Data, 10); cout << Str << endl;///不是期望的结果 itor++; } return 0; }


这是我在BCB贴的,麻烦大家看一下啊, 有简单的代码,但是我却想不通。指点一下.
如果解决了,两个贴子都都奉上,虽然分不多。
...全文
389 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
羽飞 2012-03-25
  • 打赏
  • 举报
回复
我不是说加了new就能解决问题,而是说那也是一个问题
littlestone08 2012-03-24
  • 打赏
  • 举报
回复
hnwyllmm
========
多谢指点,我才发现我在上面贴的代码没有换行,但是我没办法改贴子。可以看上面的链接,也是相同的内容。
你说的要在构造中加上NEW,我刚才试了,加了NEW还是一样,并没有效果,如果有时间的话,能不能再帮我看看?多谢谢了。我就纳闷了,这么简单的事我怎么看不出问题在哪里
羽飞 2012-03-24
  • 打赏
  • 举报
回复
这个代码弄的也太别扭了
就说这个构造函数吧:
tagSn(const tagSn& value) { tagSn(value.m_Data); }
这样写是不行的
如果想在构造函数里面调用另一个构造函数,要用placement new
tagSn(const tagSn& value) { new tagSn(value.m_Data); }

64,637

社区成员

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

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