C++;将类对象存储在向量中;把它们拉回来会让你胡言乱语 在我的C++程序中,我从SQL数据库中拉行,然后想要维护表示行的对象向量。这是我的代码,只是更改了对象名称: vector<Foo> vFoos; vFoos.clear(); for (int i = 0; i < sql.GetCount(); i++) { Foo foo; foo.nID = atoi(sql.GetItem(_T("id"),i); trace.Output(foo.nID); foo.strName = sql.GetItem(_T("name"),i); trace.Output(foo.strName); vFoos.push_back(foo); } for (long l = 0; l < vFoos.size(); l++) { trace.Output(vFoos[l].nID); trace.Output(vFoos[l].strName); } 矢量vFoos; vFoos.clear(); 对于(int i=0;i

C++;将类对象存储在向量中;把它们拉回来会让你胡言乱语 在我的C++程序中,我从SQL数据库中拉行,然后想要维护表示行的对象向量。这是我的代码,只是更改了对象名称: vector<Foo> vFoos; vFoos.clear(); for (int i = 0; i < sql.GetCount(); i++) { Foo foo; foo.nID = atoi(sql.GetItem(_T("id"),i); trace.Output(foo.nID); foo.strName = sql.GetItem(_T("name"),i); trace.Output(foo.strName); vFoos.push_back(foo); } for (long l = 0; l < vFoos.size(); l++) { trace.Output(vFoos[l].nID); trace.Output(vFoos[l].strName); } 矢量vFoos; vFoos.clear(); 对于(int i=0;i,c++,visual-studio,class,object,vector,C++,Visual Studio,Class,Object,Vector,如您所见,为了确认这一点,我立即在同一个方法中,使用我的跟踪类(输出到文件以进行调试)读回对象。在第一个循环中,foo对象的跟踪总是很好地读回,因此我们将一个完全可用的foo对象推送到vFoos向量中。但是,在第二个循环中,跟踪输出为strName属性返回一个空白值,为nID返回一个随机的10位数字(例如1729384768、972536489、-2617384908) 有人知道它为什么这样做吗?我的理解是,将一个对象向后推到一个向量中,这样就创建了一个对象的副本,所以它应该可以很好地读回 Ta

如您所见,为了确认这一点,我立即在同一个方法中,使用我的跟踪类(输出到文件以进行调试)读回对象。在第一个循环中,foo对象的跟踪总是很好地读回,因此我们将一个完全可用的foo对象推送到vFoos向量中。但是,在第二个循环中,跟踪输出为strName属性返回一个空白值,为nID返回一个随机的10位数字(例如1729384768、972536489、-2617384908)

有人知道它为什么这样做吗?我的理解是,将一个对象向后推到一个向量中,这样就创建了一个对象的副本,所以它应该可以很好地读回


Ta!

你如何实现
Foo
的复制构造函数?还有,
nID
strName
的类型是什么?可能
Foo
的复制构造函数是代理的。你确定问题出在向量上吗?还有,
Foo
看起来像什么?好的,所以我不知道“复制构造函数”的概念(对C++还是相当陌生的),所以我只是研究并实现了一个。它现在工作得很好。感觉很愚蠢..谢谢!