Struct Problem
-
Hallo,
ich habe folgendes Struct:struct menue_kat1 { menue_kat1() { id_1=-1; id_2=-1; id_4=-1; id_5=-1; } int id_1,id_2,id_4,id_5; CString title; vector<menue_kat1*> subs; };Wenn ich nun mit Schleifen die Struktur durchlaufe, dann müsste ich prüfen, ob der vector-Zeiger "subs" definiert wurde. Wie geht das?
if(subs==NULL)
break;geht nicht.
Grüße,
Michael
-
wie auch, das ist nen vector und kein pointer aufn vector ...
, der vector ist also immer da (wenn vllt auch leer) sobald deine strcut erzuegt wurde
-
zuerst mal: "Geht nicht" ist eine ziemlich miserable Fehlermeldung deinerseits. Ich bin mir sicher dass der Compiler da ausfuehrlicher ist.
Dann: definiert wurde subs, nur ist das kein Zeiger auf einen vector, sondern ein vector von Zeigern. Deswegen schlaegt auch der Vergleich mit 0 fehl. Wie du das jetzt richtig angehst, wird dir so keiner sagen koennen, da du ja nicht gesagt hast was du damit erreichen willst.
-
struct menue_kat1 { // id's int id_1; int id_2; int id_4; int id_5; // text std::wstring title; // sub-elements std::vector<menue_kat1*> childs; menue_kat1() : id_1(-1), id_2(-1), id_4(-1), id_5(-1) {} };...
menu_kat1 item; if (item.childs.empty() == true) /* TODO: Do something! */
-
Hier mein Code:
for(int i=0;i<vec__menue_kat1.size();i++) { // Prüfen, ob diese Kategorie die übergeordnete Kategorie dieses Datensatzes ist if(vec__menue_kat1[i].id_1 == _menue_kat1_dataset.id_2) { _menue_kat1 *tempSUB = new _menue_kat1; tempSUB->id_1 = _menue_kat1_dataset.id_1; tempSUB->id_2 = _menue_kat1_dataset.id_2; tempSUB->title = _menue_kat1_dataset.title; tempSUB->id_4 = _menue_kat1_dataset.id_4; tempSUB->id_5 = _menue_kat1_dataset.id_5; vec__menue_kat1[i].subs.push_back(tempSUB); }else { vector<_menue_kat1*> subsTMP, subsTMP2; subsTMP = vec__menue_kat1[i].subs; while(true) { for(int j=0;j<subsTMP.size();j++) { // Prüfen, ob diese Kategorie die übergeordnete Kategorie dieses Datensatzes ist if(subsTMP[j]->id_1 == _menue_kat1_dataset.id_2) { _menue_kat1 *tempSUB = new _menue_kat1; tempSUB->id_1 = _menue_kat1_dataset.id_1; tempSUB->id_2 = _menue_kat1_dataset.id_2; tempSUB->title = _menue_kat1_dataset.title; tempSUB->id_4 = _menue_kat1_dataset.id_4; tempSUB->id_5 = _menue_kat1_dataset.id_5; subsTMP[j]->subs.push_back(tempSUB); } } if(subsTMP[j]->subs.empty()) break; else { subsTMP2 = subsTMP[j]->subs; subsTMP = subsTMP2; } } } }Beim Ausführen sprint der Debugger zu:
size_type size() const
{return (_First == 0 ? 0 : _Last - _First); }Was das Ganze soll:
Es soll eine Menüstruktur abgebildet werden.a
-aa
-aaa
-aaaa
-aab
-aac
-ab
-ac
b
-ba
-bc
c
-ca
-
Hmm es wäre vllt sinnvoll deinen Variablen mal anständige Namen zu geben! (Wo man weiß, was hinter steckt!)
Was genau soll was machen?
-
Habe das Problem gelöst. Es hat sicher wieder gezeigt, dass man erst nachdenken sollte, bevor man anfängt zu programmieren.
Ich habe es jetzt über Rekursion gelöst.
Grüße,
Michael