вставить в wxListCtrl из & quot; карта & lt; строка, карта & lt; строка, строка & gt; & GT; & Quot;

У меня есть проект wxWidgets, который содержит 2 файла .cpp. Во-первых, цель этого — получить данные из 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

Решение

Немного сложно сказать без лучшего анализа, но я бы попробовал заменить ViewRefresh ссылкой. Я не могу понять, есть ли у вас действительный оператор = или copy-ctor для обработки операции передачи по значению.

Просто попробуйте изменить на:

void wxkitFrame::ViewRefresh(map<string, map<string ,string> > &Map)
{
...
}

Усовершенствованием может быть добавление const для защиты входного аргумента от случайных изменений, но тогда вам нужно изменить свой итератор в const_iterator. Например:

void wxkitFrame::ViewRefresh(const map<string, map<string ,string> > &Map)
{
...
}

Немного догадки, но я надеюсь, что смогу вам помочь.

0

Другие решения


По вопросам рекламы [email protected]