amiga-news 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 :nuke:

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: 7717
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:
Original von thomas:
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).

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. :D

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:
Original von Kaesebroetchen:
Kann man das vielleicht lokal in meinem Quelltext lösen ?


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.
.