Problem mit Zeigern in einer Funktion



  • Hallo,

    ich habe heute angefangen mit Zeigern zu arbeiten, und folgende Funktion geschrieben:

    //Funktion zum umkehren der boolschen Werte
    	void BoolStateChanger(int Anzahl, ...) {
    
    		try {
    			va_list parameter;	// Zugriffshandle für Parameter
    			static bool *boolparameterinhalt;	// Parameterinhalt
    			va_start(parameter, Anzahl); // Zugriff vorbereiten
    
    			// Durchlaufe alle Parameter (steht in Anzahl)
    				for (int i=0; i<Anzahl; i++) {
    					*boolparameterinhalt = va_arg(parameter, bool); // Hole den Parameter
    
    					if (*boolparameterinhalt == true) {
    						*boolparameterinhalt = false;
    					}
    					else if (*boolparameterinhalt == false) {
    						*boolparameterinhalt = true;
    					}
    				}
    
    			//Abschließen
    				va_end(parameter); // Zugriff abschließen
    		}
    		catch (...) {
    			System::Windows::Forms::MessageBox::Show("Error in function: BoolStateChanger\nError: Parameter error (not a bool?)");
    		}
    	}
    

    Da ich keine Funktion kenne die boolsche Variablen umkehrt hab ich eine eigene Funktion geschrieben und wollte sie so anwenden:

    private: System::Void showToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    		BoolStateChanger(2, &this->notifyIcon1->Visible, &this->ShowInTaskbar);
    	}
    

    Jedoch spuckt der Debugger folgendes aus, womit ich leider überhaupt nichts anfangen kann:

    : error C2102: '&' erwartet L-Wert
    : error C2102: '&' erwartet L-Wert
    : error C3861: "BoolStateChanger": Bezeichner wurde nicht gefunden.

    Würde mich sehr über Hilfe freuen.
    Mfg. BNS



  • Hi,

    in .NET habe ich aufgegeben, mit Zeigern zu arbeiten, habe es auch nicht hinbekommen, es geht aber anders:

    bool statement;
    
    //change state
    statement = -statement + 1;
    

    Vielleicht nicht der eleganteste Weg, aber sollte funktionieren.

    Wenn du deine Funktion so behalten willst, versuche es mal ohne alle & und *, vielleicht klappt es so.

    cadaei



  • Ich behaupte mal Visible und ShowInTaskbar sind Properties, keine Membervariablen. Und variable Argumentlisten, eine Altlast aus C, in C++/CLI zu benutzen halte ich sowieso für einen Frevel. Und das, wo C++/CLI doch .NET Parameter Arrays beherrscht.



  • Wieso diese Artithmetik?

    statement = !statement;
    


  • witte schrieb:

    Wieso diese Artithmetik?

    statement = !statement;
    

    Ja, das frage ich mich jetzt auch 🙄


Log in to reply