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

[ - Antworten - Zitieren - Direktlink - ]

25.04.2006, 21:32 Uhr

thomas
Posts: 7717
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:
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.

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

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