我有一个包含2个.cpp文件的wxWidgets项目。首先,它的目的是将3个wxComboBox中的数据导入到地图容器中,然后将这些数据插入到wxListCtrl中。
它的最后一部分不起作用,我无法弄清楚原因,因为插入对我来说似乎是正确的(void ViewRefresh)
- ItemsInStock is a map<string, map<string ,string> >
- Category, ItemID and Name are wxComboBox
- RaktarLista_a and RaktarLista_b are wxListCtrl objects
hasznaltmobilbolt.cpp的相关内容:
int HasznaltmobilBolt::UploadNewItem(string tipus,string azonosito, string nev)
{
int i;
map<string, string> m;
m.insert({tipus,nev});
ItemsInStock.insert({azonosito,m});
return 1;
}
以及wxkitMain.cpp的相关包含:
void wxkitFrame::OnAddButtonClick(wxCommandEvent& event)
{
string tipus=Category->GetLabel().ToStdString();
string azonosito=ItemID->GetLabelText().ToStdString();
string nev=Name->GetLabelText().ToStdString();
int i=H.UploadNewItem(azonosito, nev, tipus);
ViewRefresh(H.ItemsInStock);
*Message << "Adding new item is done.\n";
}
void wxkitFrame::ViewRefresh(map<string, map<string ,string> > Map)
{
RaktarLista_a->ClearAll();
RaktarLista_a->InsertColumn(0,"Azonosito", wxLIST_FORMAT_CENTER, 100);
RaktarLista_a->InsertColumn(1,"Nev", wxLIST_FORMAT_CENTER, 100);
RaktarLista_a->InsertColumn(2,"Tipus", wxLIST_FORMAT_CENTER,100);
RaktarLista_b->ClearAll();
RaktarLista_b->InsertColumn(0,"Azonosito", wxLIST_FORMAT_CENTER, 100);
RaktarLista_b->InsertColumn(1,"Nev", wxLIST_FORMAT_CENTER, 100);
RaktarLista_b->InsertColumn(2,"Tipus", wxLIST_FORMAT_CENTER,100);
int i=0;
for (map<string, map<string ,string> >::iterator it_azonosito=Map.begin();
it_azonosito!=Map.end();it_azonosito++)
{ for(map<string ,string>::iterator it_nev=it_azonosito->second.begin();
it_nev!=it_azonosito->second.end();it_nev++)
{
RaktarLista_a->InsertItem(i, it_azonosito->first);
RaktarLista_a->SetItem(i, 1, it_nev->first);
RaktarLista_a->SetItem(i, 2,it_nev->second);
RaktarLista_b->InsertItem(i, it_azonosito->first);
RaktarLista_b->SetItem(i, 1, it_nev->first);
RaktarLista_b->SetItem(i, 2,it_nev->second);
i++;
}
}
}
答案 0 :(得分:0)
如果没有更好的分析,有点难以说,但我会尝试用引用替换ViewRefresh。我无法弄清楚你是否有一个有效的operator =或copy-ctor来处理传递值操作。
尝试更改为:
void wxkitFrame::ViewRefresh(map<string, map<string ,string> > &Map)
{
...
}
增强功能可能是添加一个const来保护输入参数免于意外更改,但是您需要将迭代器更改为 const_iterator 。例如:
void wxkitFrame::ViewRefresh(const map<string, map<string ,string> > &Map)
{
...
}
有点猜测,但我希望我可以帮到你。