Variablen weiter geben
-
Hallo,
ich programmiere ein wenig in Visual C++ und habe nun ein Problem bezüglich globalen variablen, dazu kommt moch das ich c++-anfänger bin
Ich habe zwei Klassen in der einen Klasse soll aus gewertet werden, was in der anderen Klasse passiert ist.
Ich habe dazu einfach zwei neue member-variablen, mit einem public-zugriff, erstellt und die sollen dann in der zweiten klasse, mit hilfe einer if-schleife, abgefragt werden, welche von den beiden gedrückt wurde.
könnt ihr mir sagen warum die nicht abgefragt werden und ich als fehler immer wieder nicht deklarierte bezeichner bekomme.
-
Ein Hammer-Posting!
- Anfänger und globale Variablen passen nicht zusammen. Bis du verstehst, warum nicht, gilt: Keine globalen Variablen definieren!
- das gleiche gilt für public Membervariablen
- es gibt überhaupt keine if-Schleifen. Schleifen sind Wiederholungsanweisungen.
- wie soll hier irgendwer irgendwas wissen, wenn du keinen Code postest?
bin ich getrollt worden?
-
gekoboldet
-
naja getrollt worden bist du nicht... weil ich wirklich ein Problem habe
Ich programmiere wie gesagt in Visual C++ und da ist doch alles anders...
kannst du mir vielleicht eine tip geben bzüglich dem abfragen von dieser variablen ??
Ich habe hier einfach mal meine "Wiederholungsanweisung" :if( m_iv1) { m_strName = "Verbraucher 1"; { if (m_iv2) m_strName = "Verbraucher 2"; } . . .
Bitte nicht zuviel schimpfen
-
Kobold schrieb:
Ich programmiere wie gesagt in Visual C++ und da ist doch alles anders...
Dann frag doch im Visual C++ Forum
Ich habe hier einfach mal meine "Wiederholungsanweisung" :
Ich versteh nach wie vor nicht, was eigentlich dein Problem ist. Wie auch? BTW wird da nix wiederholt, also kanns wohl kaum eine Wiederholungsanweisung sein.
-
die im dem Forum haben mich bei der letzten frage schon weiter an euch geleitet.
und das mit der Wiederholungsanweisung, das wort kam nicht von mir...
Mein Problem ist das ich auf seite eins zwei Buttons habe
die sich beide auf die gleiche seite beziehen, wenn aber button 1 gedrückt wurde soll in in einem feld verbraucher 1 stehen oder verbraucher 2 wenn button zwei grdrückt wurde.
kann ich das auch mit einer switch case- anweisung machen oder wie sonst.
-
Fängst du etwa sofort mit GUI-Programmierung an, bevor du die C++ Grundlagen beherrscht?
-
ich habe das buch visual c++ in 21 tagen gelesen und ausprobiert und sonst nicht viel ahnung von c++, geb ich ja zu, sorry
aber dieses kleine problem könnte man doch bestimmt ohne weitere grundlagen aus der welt schaffen, oder.
Danach versprochen, werde ich mir mal ein paar grundlagen aneignen, wäre glaub ich wirklich besser......
-
Okay, der Code den Du gepostet hast ist syntaktisch mal korrekt.
Ob die Semantik stimmt kann Dir hier so wohl keiner sagen. Was funktioniert denn nicht? Zeigt er nix an, zeigt er was falsches an, oder gibt es beim übersetzen ne Fehlermeldung, falls ja: Auf welche Zeile bezieht sie sich?
Außerdem wäre es vielleicht sinnvoll einen etwas größeren Ausschnitt vom Code zu posten. Der fliegt ja auch nicht so frei in Deinem Source rum.Mit Wiederholungen ging es um folgendes: Du sagtest If-Schleife
Schleifen sind dazu da etwas wiederholt auszuführen. Da if aber nur einmal oder garnicht ausführt ist, es also keine Wiederholungsanweisung ist, ist es auch keine Schleife. Deshalb sind das was Du da gepostet hast auch keine Wiederholungsanweisungen...MfG Jester
@Bashar:
ist das dann auch keine Wiederholungsanweisung?for(int i=0; i<1; ++i) { //blabla }
-
- als fehlermeldung gibt er aus das die Bezeichener nicht deklariert sind
- es sind zwei fehler die sich nur auf diese zwei variblen beziehen.
- das mit dem code ist nciht so einfach alles was sonst án der stelle stehe ist folgendes :
if( m_iv1) { m_strName = "Verbraucher 1"; { if (m_iv2) m_strName = "Verbraucher 2"; } } m_strWider = "0"; m_strInduk = "0"; m_strWMosfet = "0"; m_strPulsf = "0"; m_strTastv = "0"; m_strSchDiode= "0"; m_strBahnDiode="0"; m_strAtyp = "0"; m_strAart = "0"; m_strPrio = "0"; UpdateData(FALSE); return TRUE;
und das sind alles ausgaben in ein eingabefeld.
-
Jester schrieb:
@Bashar:
ist das dann auch keine Wiederholungsanweisung?Immer diese Spezialfälle ... das for macht die Schleife zur Schleife, nicht wie oft sie tatsächlich durchlaufen wird.
-
@Bashar: War nur'n Spaß, ich bin sicher mit etwas Mühe kriegt man einen Ausdruck hin, für den es unentscheidbar ist, ob er nun eine Wiederholungsanweisung ist oder nicht.
@Kobold: Genau bei welchen Bezeichnern sagt er, daß sie nicht deklariert sind?
Herje, jetzt rück halt mal ein paar Infos raus und laß Dir nicht alles aus der Nase ziehen!
Und zeig mal die Codestelle wo die Deiner Meinung nach deklariert sind. Und zeig am besten mal die komplette Methode und nicht nur den Schnipsel, hab da so ne Ahnung...MfG Jester
-
bei m_iv1 und bei m_iv2 gibt er die Fehlermeldung aus.
das sind auch die zwei varibalen die ich vorhin als member-variablen mit public-zugriff erstellt habe.
-
Diese zwei sind vermutlich Member der anderen Klasse. Du brauchst also eine Instanz der anderen Klasse (oder einen Zeiger/Referenz darauf).
Falls du nicht weißt, was eine Instanz ist, und was sie von der Klasse unterscheidet, solltest du die GUI-Programmierung erst mal lassen und mit den Grundlagen anfangen.
-
Ok, danke das mit den zeiger ist eine tolle idee
denke das es so vielleicht geht.
-
Ok, danke das mit den zeiger ist eine tolle idee
Ist es nicht! Eine tolle Idee wäre, wenn du deinen Klassen entsprechende Methoden spendieren würdest. Und dafür soltest du den Grundlagen-Tipp von MFK beherzigen.
-
Beim obengenannten Codebeispiel ist mir die Bedeutung der zweiten geschweiften Klammer völlig unklar. Sie steht vor einer If-Abfrage und schließt nach dem Anweisungsteil ( wenn bedingung == true).
Versteht mich bitte nicht falsch, bin ja mit Programmiererfahrung nicht gerade reichlich gesegnet, aber ist das sysntaktisch wirklich korrekt?
Ciao arni
-
Hallo da bin ich wieder,
ich bin wahrscheilich doch zu blöd für dieses C++
jetzt bekomme ich noch nicht mal eine ordentliche abfrage zustande.....Ich habe einen Zeiger der sich auf die erste Klasse bezieht erstellt,
wenn aber der vergleich mit den Variablen ansteht, tut er keinen muks und gibt immer den letzten zugeordneten wert aus.
Ich habe das mit einer If-Anweisung probiert, hier einmal mein code :CBitmapDlg *pWnd = (CBitmapDlg*)GetParent(); if (pWnd-> m_iv1 ) { m_strName ="Verbraucher 1"; if (pWnd ->m_iv2) m_strName ="Verbraucher 2"; }
Er zeigt null fehler an, aber bei der ausgabe gibt es nur den Verbraucher 2 sonst keinen.
Ich habe deshalb kein else eingebaut da noch weiter if- anwiesung mit anderen Verbrauchern als Ausgabe folgen sollen.
-
Sieht so aus, als wäre die Variable m_iv2 immer auf true, vielleicht aktualisierst Du sie nicht richtig, wenn sich irgendwo was updated.
Du kannst in einem Programm jederzeit einen neuen Block aufmachen. Damit öffnest Du dann einen neuen Gültigkeitsbereich. Das ist zum Beispiel sinnvoll, wenn Du nicht willst, daß ein bestimmtes Objekt die ganze Funktion über verfügbar ist.
void function() { { lock myLock(Resource); // tu was mit der Resource } // hier wird zwar auch noch gearbeitet, aber die Resource wird nicht mehr // benötig, also sollte sie auch nicht mehr gesperrt sein }
-
Hallo,
das problem hat sich erledigt...
ich habe statt der if-anweisung einfach :m_dparadlg.m_strName = "Verbraucher 2"; m_dparadlg.DoModal ();
als aktion wenn ich auf den button drücke gesagt.