0

我有一个包含 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++;
    }

   }
}
4

1 回答 1

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)
{
    ...
}

有点猜想,希望能帮到你。

于 2014-10-14T14:56:02.603 回答