Hallo, ich habe da ein Problem. Meine C++ Kenntnisse reichen da leider nicht aus, auch wenn der eine oder andere sagen wird "das ist doch Basiswissen". Bitte trotzdem helfen. Ich habe ein wxWidgets Programm das soll eine Klasse aufrufen die wiederum einen eigenen Dialog aufrufen soll. Die Klassen sehen ungefähr so aus: class Main: public wxFrame class test class testdialog:public wxDialog In Test steht dann: void test::OpenDialog (bool Value) { testdialog Dialog(this); // Das hier geht nicht! } Kann mir jemand sagen was ich ändern muss, damit das funktioniert. Und wie muss ich dann den OpenDialog aufrufen? Ich gehe mal davon aus das ich hier auch was ändern muss. Viele Grüsse, Peter
Du musst schon klar formulieren, was du willst. Klassen kann man ueberhaupt nicht aufrufen und dein rudimentaerer Code bezieht sich auf "Dialog", welches im Rest des Codes ueberhaupt nicht vorkommt.
Aufrufen / anlegen ist doch fast das selbe. In der Klasse test gibt es eine Funktion "OpenDialog". Diese legt eine Dialog Klasse an. Was ich damit dann manche ist doch egal, das anlegen klappt schon nicht. In dem Main Programm wird die Klasse test angelegt und durch eine Aktion soll die Funktion "OpenDialog" aufgerufen werden. Aber wenn man C++ richtig kann sollte man schon gemerkt haben was ich will.
Peter schrieb: > Aber wenn man C++ richtig kann sollte man schon gemerkt haben was ich > will. oder es gennt niemand den fehler "Das hier geht nicht!" gibt es nicht eine Fehlermeldung wo drin steht, was das Problem ist?
Peter schrieb: > Diese legt eine Dialog Klasse an. Eine Klasse kannst du mit C++ aber nicht zur Laufzeit anlegen. Da bräuchtest du schon C# oder was Vergleichbares...
Peter schrieb: > Aufrufen / anlegen ist doch fast das selbe. Nein. > In der Klasse test gibt es eine Funktion "OpenDialog". > Diese legt eine Dialog Klasse an. Sicher nicht. Sie instantiiert vielleicht die Klasse, legt also eine Instanz an. > In dem Main Programm wird die Klasse test angelegt und durch eine Aktion > soll die Funktion "OpenDialog" aufgerufen werden. Und das geht nicht? > Aber wenn man C++ richtig kann sollte man schon gemerkt haben was ich > will. Solange nicht klar ist, wie der Konstruktor von Dialog aussieht, und wie Dialog vererbungsmäßig zu den anderen Klassen steht, kann doch niemand wissen, was dein this da bewirken soll.
aufrufen anlegen instantiieren Leute man kann sich aber auch anstellen. Sollte doch jeder kapieren was ich meine, das ist doch nun wirklich nicht so schwer. Was braucht ihr denn um diesen Fehler zu finden? Meine 500mb Sourcen? Normalerweise habe ich schon mehr gezeigt als nötig ist für diese Art Problem. Nun der Compiler sagt this zeigt auf einen const Pointer und nicht auf meine WxWidgets Applikation. Klar wohin soll der denn auch sonst zeigen. Die klasse test kennt ja keine Verbindung zu dem Wxwidgets System. Und darum geht es doch. Aber so wie es aussieht ist heute niemand hier der mir helfen kann oder will.
Peter schrieb: > Aber so wie es aussieht ist heute niemand hier der mir helfen kann oder > will. Doch. Der Fehler ist "Du kannst kein C++". Behebbar einfach durch "C++ Lernen".
Das ich nicht gut c++ kann hatte ich schon am Anfang gesagt! Was der Compiler meldet habe ich doch geschrieben! Gut nicht raus kopiert aber in etwa habe ich das wieder gegeben.
Du hast eine Klasse "Dialog", über die wir nix wissen. Diese hat einen Konstruktor. Dieser Konstruktor will einen Parameter, über den wir auch nix wissen. Du übergibst einen Wert vom Typ "test *" an den Konstruktor. Dieser passt nicht. Nachdem wir die Klasse "test" auch nicht kennen, wie sollen wir herausfinden, wie du die unbekannte Klasse test in den unbekannten Typ für den unbekannten Konstruktor-Aufruf umwandeln kannst?
Peter schrieb: > Das ich nicht gut c++ kann hatte ich schon am Anfang gesagt! > > Was der Compiler meldet habe ich doch geschrieben! > Gut nicht raus kopiert aber in etwa habe ich das wieder gegeben. Willst du jetzt streiten oder Hilfe? Dann gebe den Helfenden die notwendigen Infos oder lerne selbst programmieren!
Peter schrieb: > Was der Compiler meldet habe ich doch geschrieben! nein hast du nicht. > Nun der Compiler sagt this zeigt auf einen const Pointer und nicht auf > meine WxWidgets Applikation. das sagt er bestimmt nicht. Das hast du übersetzt. Und this dürfte in dem Beispiel gar nicht const sein.
KANNST oder WILLST du die Fehlermeldung nicht posten? Der genau Wortlaut ist in so einem Fall wichtig. PS: Dein Ton ist leicht unverschämt. Schalte mal einen Gang zurück...
>>Nun der Compiler sagt this zeigt auf einen const Pointer und nicht auf
meine WxWidgets Applikation.
Nun ja, in C und C++ kann man alle Pointer durch casten auf etwas
anderes setzen.
Also mache einfach einen Cast auf den benötigten Typ, und der Compiler
meckert nicht mehr.
Den genauen Wortlaut kann ich erst so ab 19Uhr kopieren. Vorher bin ich noch unterwegs. Unverschämt will ich nicht rüberkommen. Aber es ist leider immer wieder das selbe: - gib mal den ganzen Code - rück erst mal das und jenes raus Darum reagiere ich dann auch immer etwas genervt. Ich versuche halt immer genug Informationen wie nötig preis zu geben. Ich Programmiere nun genug Jahre in C und kann recht gut abschätzen was ausreicht. Die Fehler Meldung habe ich zwar aus dem Kopf wieder gegeben, aber der eigentliche Text wird nicht viel mehr sagen. Denn poste ich aber nachher auch hier, auch wenn ich nicht glaube das der hilft. Peter
Peter schrieb: > Ich versuche halt immer genug Informationen wie nötig preis zu geben. Der Versuch ist gescheitert. > Ich Programmiere nun genug Jahre in C und kann recht gut abschätzen was > ausreicht. Offensichtlich nicht. Jetzt haben dir schon zwei Leute ausführlich erklärt, welche Informationen noch fehlen (Parameter des Konstruktors, Klasse Dialog, Vererbungsbeziehung), um da auch nur ansatzweise was sagen zu können, und du pampst einfach weiter. Mit diesem an den Tag gelegten Autismus wirst du Glück brauchen, daß dir überhaupt noch jemand helfen mag. Ich jedenfalls nicht, ich bin hier jetzt raus.
Peter schrieb: > Ich Programmiere nun genug Jahre in C und kann recht gut abschätzen was > ausreicht. Gerade mit dem Hintergrund solltest du wissen, daß es eben doch einen Unterschied ist ob ich eine Variable oder eine Konstante habe, ob es eine const oder keine const Variable ist oder eben auch daß anlegen, instanziiren, definieren eine bestimmte Bedeutung haben. Labern kannst du in BWL und Psychologie, in den Ingenieurwissenschaften zählt Präzision, auch in der Verwendung von Begriffen.
Gerade weil es hier nicht um Psychologie Fragen geht und jeder eigentlich wissen sollte was gemeint ist, auch wenn man sich mal falsch ausdrück, hätte ich es besser gefunden, wenn nicht jeder sich daran aufgeilt das man es falsch benennt. Lieber nichts sagen! Wer mit den ganz oben genannten Informationen nichts anfangen kann, bedeutet entweder: "keine Ahnung" - was nicht schlimm ist. oder "Es fehlt wirklich eine kleine Info" - die könnte man aber gezielt abfragen wenn man helfen will. Das hat aber niemand gemacht, außer der Frage nach der Fehler Meldung. Das ich hier anscheiden im falschen Forum bin habe ich in zwischen auch gemerkt und reagiere nur noch wenn mir hier wirklich jemand helfen will. Auf die ganzen "Das heißt aber nicht so" Kommentare habe ich keinen Bock mehr, die helfen niemanden. Hier drauf brauch auch keiner reagieren, außer er kann helfen. Und ja, ich ich bin genervt!
Peter schrieb: > Und ja, ich ich bin genervt! Darüber ein Problem nicht so beschreiben zu können, daß andere dir helfen können?
Der besseren übersichtlichkeit habe ich - ähnlich wie bei deinem Sourcecode-Ausschnitt - meine Antwort auf das wesentliche eingedampft und anschließend die Buchstaben alphabetisch sortiert. Da die Fragestellung ja klar ist, sollte sich so die Antwort auch einfach erschließen lassen, die Leerzeichen erschließen sich dem Deutschkundigen sowieso. ,,,,.....:::DDEFFIIKNOPSUVWaaaaaaaaaaaaaaaaaaaaaaabbbbbccccccccccccc dddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffgghhh hhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiikkkkkklllllllllllllllmm mmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnooooooooooooppprrrrr rrrrrrrssssssssssssssssssssssssssttttttttttttttttttttttttuuuuuuuuuuv wwwyzzä Viele Grüße, Simon
Ich empfehle Dir dieses Buch: http://www.amazon.de/f%C3%BCr-Kids-Objektorientierte-Programmierung-Einsteiger/dp/3826607430
Ok, dann erfrage ich mal gezielt eine Information: Poste doch mal bitte die Deklarationen der Konstruktoren von testdialog und wxDialog.
Gut, der ist natürlich jedem zugänglich: wxDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = "dialogBox")
Peter schrieb: > aufrufen anlegen instantiieren > Leute man kann sich aber auch anstellen. > Sollte doch jeder kapieren was ich meine, > das ist doch nun wirklich nicht so schwer. Darum geht es gar nicht. Wenn du die Begriffe so wild vertauschst, zeigt das, daß du nicht verstanden hast, wie es funktioniert. Und das wird einer der Gründe sein, warum dein Programm nicht geht. Übrigens: Gerade beim Programmieren ist es wichtig, alles genau anzugeben, denn spätestens der Compiler kann sich nicht mehr denken, was du willst, wenn du was anderes hinschreibst, als du eigentlich meinst. > Was braucht ihr denn um diesen Fehler zu finden? > Meine 500mb Sourcen? Nein. Aber ich nehm dir nicht ab, daß dein Programm bereits 500 MB Source Code hat, wenn du noch nicht mal einen Dialog aufbekommst. Vermutlich sind die Sourcen in Wahrheit nicht mal 1 kB groß. Das gleich am Anfang zu posten, hätte dir (und anderen) viel Ärger und Frust erspart. > Normalerweise habe ich schon mehr gezeigt als nötig ist für diese Art > Problem. Du hast nahezu gar nichts gezeigt. Versuche mal, dich in die Situation des Antworters zu versetzen, und überlege dir, ob es wirklich möglich sein kann, ausschließlich mit den Informationen aus deinem Posting die Frage zu beantworten. Deine Frage ist ungefähr so, als ob du beim Arzt anrufst und sagst: "ich war gestern Skifahren und heute tut mir was weh. Was kann man jetzt dagegen tun?" Peter schrieb: > Unverschämt will ich nicht rüberkommen. > Aber es ist leider immer wieder das selbe: > - gib mal den ganzen Code > - rück erst mal das und jenes raus Das liegt halt daran, daß immer wieder grundlegende Infos fehlen, was übrigens auch sehr nervt. Peter schrieb: > "Es fehlt wirklich eine kleine Info" Eher "es fehlen nahezu alle Infos" > - die könnte man aber gezielt abfragen wenn man helfen will. Das wurde auch mehrfach getan. Leider hast du versäumt, die Infos zu geben. Stattdessen faselst du was von 500 MB Sourcen und gibst deine freie Interpretation der Compiler-Meldung an. Philip K. schrieb: > wxDialog(wxWindow* parent, wxWindowID id, const wxString& title, const > wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, > long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = "dialogBox") Mit dem Konstruktor von wxDialog alleine kann man nicht wirklich was anfangen. Man braucht den Konstruktor von testdialog. Wenn dort der erste Parameter auch ein wxWindow* sein sollte, braucht man die Vererbungshierarchie von test. Wenn das nicht von wxWindow abgeleitet sein sollte, wird's wohl so nicht gehen können. Was man dagegen tun kann, sollte die Doku von wxWindow verraten.
Klingt eher nach 500MB Sourcen runtergeladen, dran geschraubt und schnell festgestellt, daß man mental überfordert ist. C++ von der Syntax her zu kennen ist eins, bei komplexen Frameworks ist aber die Klassenhierarchie das größere Hindernis. Und die Vorstellung, daß jeder wxIrgendwas kennen müsste und noch mehr, daß man ein Anspruch auf Fehlerbehebung durch Andere hätte, das ist schon " gewöhningsbedürftig". Schreib erst mal ein Minimalprogramm, das nur den Dialog aufmacht. Eventuell ist das ja einfacher als gedacht und funktioniert. Dann frag dich, was in dem 1/2 GB anders sein könnte. Erfahrung sammelt man nicht, wenn's ein anderer für einen macht!
C++ schrieb: > C++ von der Syntax her zu kennen ist eins [...]. Aber das ist ja nicht mal gegeben.
1 | testdialog Dialog(this); // Das hier geht nicht! |
(wobei "testdialog" ein Typ bzw. eine Klasse ist) ist ja syntaktische Grütze. Keine Variablendeklaration (Name fehlt), keine instanziierung eines Objektes ("= new" fehlt), bestenfalls mit viel gutem Willen ein Funktionsprototyp an einer falschen Stelle mit den falschen Identifiern. Wie in meiner Antwort oben geschrieben: > In deinem Programmausschnitt fehlen die Klassendefinitionen. > Es kann auch nicht mal compilieren, da da mindestens ein paar > entscheidende Semicolons fehlen. > Weiterhin steht in test::OpenDialog etwas, von dem nicht klar ist, > ob es eine Variablendeklaration oder ein Funktionsaufruf ist. > In beiden Fällen ist es syntaktisch falsch. > > Um es kurz zu machen: Nein, Du hast noch nicht beschrieben was du > tun willst. Viele Grüße, Simon
Simon Budig schrieb: > Aber das ist ja nicht mal gegeben. > testdialog Dialog(this); // Das hier geht nicht! > > (wobei "testdialog" ein Typ bzw. eine Klasse ist) > > ist ja syntaktische Grütze. Keine Variablendeklaration (Name fehlt), > keine instanziierung eines Objektes ("= new" fehlt), bestenfalls mit > viel gutem Willen ein Funktionsprototyp an einer falschen Stelle mit > den falschen Identifiern. also für micht ist das vom Syntax her sauber. Es wird ein neues Objekt vom Type testdialog mit dem namen Dialog mit einen kontruktur angelegt.
1 | class A { public: A(int) {} }; |
2 | |
3 | int main() |
4 | {
|
5 | A a(1); |
6 | };
|
Peter II schrieb: > also für micht ist das vom Syntax her sauber. Njargh, du hast wohl recht. Ich habe "Dialog" immer als Klassenname gelesen. Grüße, Simon
Endlich mal was vernünftiges. Peter II hat vollkommen recht, new braucht hier kein Mensch. Mein Code ist logischerweise nicht 500mb groß, die 50kb hat Der aber schon lange überschritten. Ich bin am Umschreiben / Umstrukturieren, da einiges in Libs gepackt werden soll. So Leute mein Fehler ist so banal, das es mir zeigt das die meisten auch wenig Ahnung haben, aber viel reden. Wie gesagt: testdialog Dialog(this); // geht nicht! Da this auf was falsches zeigt. Das habe ich auch gesagt und könnte zudem jedem auffallen. Diese Info muss man nur übergeben. Hoffentlich habe ich "wxWindows" jetzt richtig geschrieben. void test::OpenDialog (bool Value, wxWindows * parent ) { testdialog Dialog(parent); //und nun geht alles! } Jetzt muss man nur noch aus dem Hauptprogramm den OpenDialog entsprechend aufrufen und fertig ist das ganze. Das ganze kann man möglicherweise auch mit Vererbung hin bekommen, aber das braucht es hier nicht. Viele Grüße, Peter
Peter schrieb: > So Leute mein Fehler ist so banal, > das es mir zeigt das die meisten auch wenig Ahnung haben, aber viel > reden. Oh wow. Viele Grüße, Simon
Peter schrieb: > Wie gesagt: testdialog Dialog(this); // geht nicht! > Da this auf was falsches zeigt. du schuldest uns immer noch die genaue Fehlermeldung! > void test::OpenDialog (bool Value, wxWindows * parent ) > { > testdialog Dialog(parent); //und nun geht alles! > } deine Klasse test ist auch kein wxWindows, damit ist doch wohl klar warum this hier nicht passt.
Peter schrieb: > Peter II hat vollkommen recht, new braucht hier kein Mensch. Ich würde mich bei Deinem wissen, nicht so weit aus dem Fenster lehnen, denn Peter schrieb: > Wie gesagt: testdialog Dialog(this); // geht nicht! > Da this auf was falsches zeigt. beweist, dass Du keine Ahnung hast.
Stimmt die Fehlermeldung! Hatte gestern den Fehler behoben und die Meldung nicht wieder bekommen. Müsste erst den Fehler wieder einbauen um die genaue Fehlermeldung zu bekommen, aber das brauchen wir doch nicht wirklich noch? Darum hatte ich doch auch gefragt wo mein Fehler ist. Eine kurze Antwort "Die Klasse test ist kein wxWindows, da musst Du XYZ machen" und schon wäre der ganze schreib Kram hier überflüssig gewesen.
Etwas Ahnung habe ich dann doch schon, nur bin ich nicht ein c++ Profi. Darum mache ich immer wieder Fehler oder komme nicht weiter.
Peter schrieb: > "Die Klasse test ist kein wxWindows, da musst Du XYZ > machen" und schon wäre der ganze schreib Kram hier überflüssig gewesen. Es ist oft eine gute Lösung ein Problem heuristisch zu lösen. Dennoch haben heuristischen Lösungen ihre Tücken. Irgendwann rächt es sich, wenn man mit Dingen arbeitet, die man gar nicht versteht. Das sind dann diese Programme, die irgendwann spontan abschmieren und keiner weiß warum. Lerne lieber die Grundlagen von C++. Wenn Du immer wieder per Trial and error zu einer befriedigenden Lösung kommst, wirst Du dennoch immer an einen Punkt kommen, der Dich zwingen wird wieder so einen Thread hier aufzumachen.
Peter schrieb: > Stimmt die Fehlermeldung! [...]> > Darum hatte ich doch auch gefragt wo mein Fehler ist. Fehlermeldungen haben die Funktion, dir dabei zu helfen, Fehler zu finden. Die geben normalerweise sehr konkrete Hinweise was falsch ist. Nur muss man sie dafür auch lesen können. Und das hast du uns nicht zugestanden, weswegen wir hier wild im Nebel stochern mussten. Nunja, offensichtlich sind wir unfähig wenn wir im Nebel den Fehler nicht finden können. Was das für deine Kompetenz bedeutet wenn du ohne Nebel den Fehler nicht findest muss man ja nun nicht weiter ausdiskutieren. Viele Grüße, Simon
Peter schrieb: > Eine kurze Antwort "Die Klasse test ist kein wxWindows, da musst Du XYZ > machen" und schon wäre der ganze schreib Kram hier überflüssig gewesen. und diese hätte man aber nicht wissen können ohne die Fehlermleldung zu sehen.
Warum antwortet identisch noch irgendwer auf einen so freundlichen Zeitgenossen? @Peter: Niemand hat irgend ein Verpflichtung deine geheimen Probleme zu lösen! Gewöhn dir einfach mal einen anderen Umgangston an, dann mag man dir vielleicht helfen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.