ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > C++ ifstream get() | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
25.04.2006, 21:07 Uhr Kaesebroetchen Posts: 643 Nutzer |
Hallo, folgender code verursacht bei mir folgendes Problem: C++ code:dat_in.get(character); code:main.cpp:202:64: macro "get" requires 3 arguments, but only 1 given main.cpp: In function 'int main()': main.cpp:202: error: statement cannot resolve address of overloaded function dat_in ist eine instanz von ifstream. Ich bin ein bisschen ratlos, weil dieser code mit einem andere g++ schon mal funktioniert hat. Ich verwende den g++ 3.3.1 für Aros -- http://amidevcpp.amiga-world.de/ [ - Antworten - Zitieren - Direktlink - ] |
25.04.2006, 21:20 Uhr Holger Posts: 8116 Nutzer |
@Kaesebroetchen: Offensichtlich wurde ein Makro namens get mit drei Parametern definiert. (Zur Erinnerung, das sind diese häßlichen Dinger: #define get(X,Y,Z) irgendetwas ). Dabei hast Du noch Glück, daß die Parameterzahl nicht übereinstimmt, und der Präprozessor schon aussteigt. Sonst hätte die Ersetzung funktioniert und der Compiler eine noch unverständlichere Fehlermeldung gebracht. Oder noch schlimmer, alles ohne zu murren übersetzt Also, da Du vermutlich nicht wissentlich ein solches Makro definiert hast, mußt Du rausfinden, welcher #include Dir dieses Makro beschert. Eigentlich sollten bei den Standard-headern bei einem C++ Compiler inzwischen auch die letzten Autoren begriffen haben, daß es einen Kontext zu berücksichtigen gibt und deshalb auf die "Optimierung", Funktionen durch Makros zu ersetzen, verzichtet werden sollte. Deshalb solltest Du als erstes alle 3rd party und AOS (falls verwendet) includes überprüfen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
25.04.2006, 21:32 Uhr thomas Posts: 7718 Nutzer |
Da muß man nicht lange etwas überprüfen. Die Makros set und get gehören zu MUI und sind einfach Aliase für GetAttr bzw. SetAttrs (wobei die Parameter aber in anderer Reihenfolge übergeben werden, also nicht einfach ersetzen). Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
25.04.2006, 21:41 Uhr Holger Posts: 8116 Nutzer |
Zitat:Ah, dann diente der eingehandelte Ärger also noch nicht mal einem "Performancegewinn", sondern dem Einsparen von vier rep. fünf Zeichen source-code (und dem Umdrehen der Parameterreihenfolge). Alles Klar. Na ja, noch lustiger wird, wenn die OS-Funktionen per inline-Makros eingebunden werden und man auf die Idee kommt, mal eine Methode Open zu nennen, etc... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
25.04.2006, 22:12 Uhr Kaesebroetchen Posts: 643 Nutzer |
Sehe ich das richtig ? Die .get Methode von ifstream kann ich knicken wenn ich MUI verwende ? Oder kann ich das irgendwie kapseln ? -- http://amidevcpp.amiga-world.de/ [ - Antworten - Zitieren - Direktlink - ] |
25.04.2006, 22:26 Uhr Kaesebroetchen Posts: 643 Nutzer |
Ich habe eine vorrübergehende Lösung gefunden. Ich habe einfach das get(... define in der <libraries/mui.h> in m_get(... umbenannt. Das ist natürlich keine vernünftige Lösung, da es Inkompatibel zu vielen Quelltexten ist. Ausserdem muss ich es jedesmal wenn ich ein neues Aros SDK installiere wieder in den includes herumfrickeln. Kann man das vielleicht lokal in meinem Quelltext lösen ? -- http://amidevcpp.amiga-world.de/ [ - Antworten - Zitieren - Direktlink - ] |
26.04.2006, 01:26 Uhr Holger Posts: 8116 Nutzer |
Zitat: Aaargh, ich und C... #undef get müßte das machen IIRC. Also korrekt dann #ifdef get #undef get #endif Besser wäre, den Quelltext aufzusplitten, I/O-Routinen sind normalerweise vom gui-code getrennt, sprich, Du kannst den einen Teil ohne MUI übersetzen und den anderen mit. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > C++ ifstream get() | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |