DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > C++ ifstream get() | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2006-04-25, 21:07 h Kaesebroetchen Posts: 643 User |
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/ [ - Answer - Quote - Direct link - ] |
2006-04-25, 21:20 h Holger Posts: 8116 User |
@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. [ - Answer - Quote - Direct link - ] |
2006-04-25, 21:32 h thomas Posts: 7718 User |
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/ [ - Answer - Quote - Direct link - ] |
2006-04-25, 21:41 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
2006-04-25, 22:12 h Kaesebroetchen Posts: 643 User |
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/ [ - Answer - Quote - Direct link - ] |
2006-04-25, 22:26 h Kaesebroetchen Posts: 643 User |
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/ [ - Answer - Quote - Direct link - ] |
2006-04-26, 01:26 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > C++ ifstream get() | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |