2013-12-09 47 views
0
在方法

复制本地列表,我有一个本地variabile的C++列表:在成员列表

std::list<proiezione> ora;  

和相同类型

std::list<proiezione> orb; 

的成员变量以我方法我有

for (std::list<proiezione>::iterator it = ora.begin(); it != ora.end(); ++it) 
    this->orb.push_back(*it); 

但不起作用!

this-> mem是空的!为什么?

正是:

class CMFCApplication4Doc : public CDocument 
{ 
public: 
std::map<CString, Esame> esami; 
INT valore_lode; 
proiezione pr; 
std::list<proiezione> orb; 
    void get_proiezione(FLOAT media_desiderata); 
} 

void CMFCApplication4Doc::get_proiezione(FLOAT media_desiderata) 
{ 
    std::list<proiezione> ora; 
std::vector<CString> v_proiezione; 
CString appoggio; 
std::map<CString, Esame> es = esami; 
calcola_proiezione(ora,&pr, es, media_desiderata,valore_lode); 
for (std::list<proiezione>::iterator it = ora.begin(); it != ora.end(); ++it) 
    this->orb.push_back(*it); 
ecc ecc (I don't touch orb anymore) 

} 

在调试模式下我有 “邑” 与25个元素,但 “这个 - >球体” 零元!

+0

'mem =或;'应该根据您的标题来判断。如果你真的想要追加列表,可以使用'insert'。 – chris

+3

'或'是每2.12/2('||'的替代拼写)的保留标识符。 – Casey

+0

同样的行为也改变名称:( – volperossa

回答

1

为什么不使用std::copy算法?

std::copy(tList.begin(), tList.end(), std::back_inserter(mem)); 

或者使用复制交换:

void MyClass::func(std::list<proiezione> tList) 
{ 
    mem.swap(tList); 
} 

或者使用assign成员:

mem.assign(tList.begin(), tList.end()); 

或者使用拷贝赋值运算符:

mem = tList; 

没有看到更多的代码,这将是哈rd告诉你为什么它是空的。

差点忘了(凯西与提醒我):or实际上是一个保留字,所以你要为其他变量命名你的变量。

+0

尝试,但行为相同..我添加了一些问题的代码行.. – volperossa

+0

@volperossa'calcola_proiezione'的声明和实现是什么? –

+0

这不是问题,我也试试这个用相同的结果: '// calcola_proiezione(ORA,&PR,ES,media_desiderata,valore_lode); \t的std ::列表测试; \t proiezione NUOVA; \t test.push_back(NUOVA); \t为(STD: :list :: iterator it = test.begin(); it!= test.end(); ++ it) \t \t this-> orb.push_back(* it);' 结果:orb.size()= 0; test.size()= 1 我认为问题在于orb的声明中;我应该初始化它为任何值? – volperossa