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


Anmelden zum Antworten