C++ in wxDev-C++ 6.10.2 -- wxChoice?!

droG

Cadet 1st Year
Registriert
Apr. 2011
Beiträge
8
Hi,

ich bin ein winziger Hobbyprogrammierer und haben in der Schule ein Projekt laufen.
Wir benutzen in der Schule wxDev-C++ mit wxFrame.
Meine Frage/Problem wäre.

Wir haben nur begrenzte Sachen gelernt in der der Schule (logisch), aber ich würde gerne für die kommende Projektarbeit ein "wxChoice"-Feld einbauen.
Wir haben immer eine ProjektnameFRM.wxform-Datei, programmieren daher die ganzen Sachen nicht selbst. Dort habe ich das WxChoice-Feld bereits eingefügt, nur jetzt finde ich keine Befehle um dort Auswahlmöglichkeiten einzugeben =/.

Mein Ziel ist. In dem Feld ein Radionuklid(von mehreren) auszuwählen, für welche ich davor Werte bestimme, und dann durch die Auswahl der zuvor bestimmte Wert geladen wird und zur Berechnung hergenommen wird.

Ich hatte ein Guide für wxDev-C++ gefunden, jedoch hat der mir nicht weitergeholfen, bzw. dort wird halt das Feld selber programmiert und dann bringt der mir eine Fehlermeldung :/

Code:
#include "wx/choice.h"

wxArrayString strings;
strings.Add(wxT("Uran")); // hier bringt der die Fehlermeldung " expected constructor, destructor, or type conversion before '.' token"
strings.Add(wxT("Plutonium"));
strings.Add(wxT("Radon"));

Ich hoffe es kann wer helfen :)

lg
 
Du rufst den Konstruktor nach dem Variableanlegen nicht auf, deswegen diese Fehlermeldung und deswegen kannst du auch noch nicht auf dein Objekt mit dem "." Operator zugreifen.

Ps: Ich habe die Fehlermeldung nur interpretiert, komme eig. aus dem Java Bereich!
 
Zuletzt bearbeitet:
@monsterhaus: Der Standardkonstruktor wird implizit aufgerufen.

@droG: Ich habe von wxDev leider keine Ahnung, allerdings frage ich mich, ob du alle nötigen Header inkludiert hast?
 
Hast du den Code überhaupt in eine Funktion gepackt? Also du kannst nicht einfach "strings.Add" direkt unter die #include Anweisung schreiben, sondern das muss in eine Funktion.
 
Nein ist in keiner Funktion.
Doch müssen die Überhaupt da rein?
Weil dann müsste ich ja die Funktion erst ausführen bevor mir die Auswahlmöglichkeiten angezeigt werden? Aber die sollen ja von Anfang an vorhanden sein?

Wie müsste ich denn die Funktion nennen?

lg

::edit::
Ich habe die Befehle jetzt einmal dort eingefügt, was er erstellt wenn ich doppelklick auf das wxChoice mache.
void SchulprojektFrm::WxChoice1Selected(wxCommandEvent& event )
{
strings.Add(wxT("One"));
strings.Add(wxT("Two"));
strings.Add(wxT("Three"));
}

Doch wie gesagt, jetzt kommt zwar die Fehlermeldung nicht mehr, doch ist auch mein Auswahlsfeld leer.
 
Zuletzt bearbeitet: (Nachtrag)
Falls es keine main Funktion gibt, dann klick mal doppelt auf das Form selbst. Vlt erstellt er dann eine Initialize Funktion oder so ähnlich.
 
Du kannst dem wxChoice die Optionen als Parameter an den Konstruktor übergeben.
Ergänzung ()

Sprich was in der Richtung:

wxChoice *obj = new wxChoice(..., strings);
 
Da kommt das Problem, ich weiß nicht was die Main-Funktion sein soll. Und was ich genau in diese schreiben soll. Wir haben nur immer Funktionen erstellt indem wir Doppelklick auf die Buttons gemacht haben.
Durch die Erstellung des Projekts wurden 6 Dateien erstellt - SchulprojektApp.cpp | xxxApp.h | xxxApp.rc | xxxFrm.h | xxxFrm.cpp | xxxFrm.wxform .

In der Schule sind wir nur auf xxxFrm.cpp und xxxFrm.wxform unterwegs, im ersteren schreiben wir die Befehle in die Funktionen und im zweiteren kann man per Klicks seine Oberfläche verändern (Buttons, Texte, etc.).

lg

::edit1::
er hat durch den Doppelklick eine Funktion erstellt :

void SchulprojektFrm::WxChoice1Selected(wxCommandEvent& event )

dort habe ich auch (s.o.) schon mein Code eingefügt.

::edit2::
Code:
	wxArrayString arrayStringFor_WxChoice1;
	WxChoice1 = new wxChoice(WxPanel1, ID_WXCHOICE1, wxPoint(36,51), wxSize(145,23), arrayStringFor_WxChoice1, 0, wxDefaultValidator, wxT("WxChoice1"));
	WxChoice1->SetFont(wxFont(9, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Segoe UI")));
	WxChoice1->SetSelection(-1);
Das steht in der Funktion
Code:
void SchulprojektFrm::CreateGUIControls()
 
Zuletzt bearbeitet: (nachtrag)
Ich will jetzt nicht über den fragwürdigen Nutzen eines solchen Informatikunterrichts reden, da du dafür am wenigsten etwas kannst ;)

Irgendwo sollte etwas in der Richtung MyApp::OnInit() stehen, darin werden möglicherweise die Objekte erstellt (ich selbst arbeite nicht mit der lib, daher kann ich dir das nicht genau sagen).


Allerdings: Über kurz oder lang wirst du nicht darum herum kommen, C++ ernsthaft zu erlernen, da du mit deinen bisherigen Kenntnissen und dem mangelndem Verständnis von dem, was du eigentlich machst, nicht weit kommen wirst (das ist in keinster Weise eine Kritik an dir, als viel mehr am Info-Unterricht an Deutschlands Schulen ;) ).

Würde dir raten, wenn du es wirklich erlernen willst, dir ein Einstiegsbuch zuzulegen. Diese Bücher sind zwar nicht besonders toll, aber für absolute Neulinge durchaus zu empfehlen. Mein Verkaufsthread hätte sogar ein paar zu C++ ;)


Gruß,

badday
 
Okay habs hinbekommen, hab die strings umbenannt in
Code:
arrayStringFor_WxChoice1.Add(wxT("One"));
und über WxChoice = new wxChoice .... gesetzt.

So, nur noch eine Frage. Wie kann ich das nun umsetzen das ich, je nachdem was ich auswähle, ein anderer Wert in eine Variable eingeschrieben wird?


::edit::

Ja ich weis, ich interessiere mich schon dafür, habe auch bereits so ein Buch daheim, doch es ist halt ein Unterschied zwischen richtigen C++ und wxFrame :/ vor allem, wir erlernen nur wie man einen Graphen zeichnet und einen Button Klick programmiert, das wars :( . Deshalb bin ich ja an euch heran getreten wegen dem wxChoice-Feld.
 
Zuletzt bearbeitet:
http://docs.wxwidgets.org/trunk/cla...mutable.html#18a7cb1a652772d5cb8adc52be1efea0
ich habe zwar was gefunden wo was steht, aber weis nicht wie ich das einfügen kann das es so funktioniert wie ich will -.- Also ich bekomme nicht den Wert, welche Auswahl nun getroffen wurde(das wird ja von 0-x bezeichnet) und dann müsst ich ja den wert in ne variable rein bringen und dann nur per if vergleichen welchen ich haben will.
Nur ich bekomm den Wert aus dem wxChoice nich raus :/
 
Ja das hab ich auch schon probiert, nur wie kann ich den wert den ich da abfrage (die strings im wxChoice werden von 0 bis x durchnummeriert) abfragen, sodass ich die in ner if-funktion vergleichen kann?

::edit::
nich abfragen, sondern mehr in ne variable oder so schreiben, das ich halt den weiter verwenden kann etc.
 
Zuletzt bearbeitet: (falsch ausgedrückt)
GetCurrentSelection() gibt dir ja ein int zurück. Diesen Wert kannst du dann benutzen.

Oder was meintest du?
 
Ja das meine ich, doch wie heist die int.

also ich würde halt WxChoice->GetCurrentSelection(); schreiben, dagegen sagt das Programm auch nix, aber wie find ich den namen der int raus?
 
Du musst dich wirklich mal damit beschäftigen, wie Funktionen aussehen ;)

Funktionen haben immer einen Rückgabewert und 0 oder mehr Parameter. So, d. h. WxChoice::GetCurrentSelection() gibt int zurück. Diesen Wert erhältst du dann mit
obj->GetCurrentSelection(), bzw. wenn du es aus einer Memberfunktion von deinem WxChoice aufrufst via this->GetCurrentSelection(). Das sieht dann so aus:

int a = this->GetCurrentSelection();

a hat nun den Wert, den die Funktion zurückgab.

Ich fürchte, du wirst nicht drum herumkommen, dich mit der Materie im Allgemeinen genauer auseinanderzusetzen.

Ich habe hier u. A. C++ - Programmieren mit einfachen Beispielen (ISBN 3827241065, Dirk Louis, Markt&Technik) (als Mängelexemplar gekennzeichnet, aber nicht bemerkbar) und C/C++ Referenz (ISBN 9783772360893, Franzis) (Als Mängelexemplar gekennzeichnet, aber guter Zustand) herumliegen, die ich ohnehin nicht mehr brauche. Falls du an den Büchern interessiert bist, melde dich einfach (PM), würde sie dir günstig überlassen.


Gruß,

badday
 
Danke funktioniert super.

Ja ich werde mich damit beschäftigen... wenn mein Abi vorbei ist :/ ^^
Jetzt muss ich erstmal für Mathe etc. büffeln ^^

lg

p.s.: Kann geclosed werden.
 
Zurück
Oben