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