Seite 1 von 1

Referenz einen Defaultwert zuweisen: Unter Windows geht's, u

Verfasst: 14. Januar 2008 15:33
von PhilippM
Hallo,

ich portiere gerade ein unter Windows lauffähiges Qt-Projekt nach Linux.

Dabei stolpert der Compiler über Zeilen der Form:

Code: Alles auswählen

bool Funktionsname(int& Parameter1, ...... , double& Parametername = 0.0);
mit der Meldung "error: default argument for parameter of type "double&" has type "double""
Inhaltlich ist mir diese Meldung durchaus verständlich, da 0.0 ja ein double und keine Referenz ist. Unter Windows kompiliert dass aber alles tadellos, welche Einstellung muss ich vornehmen, damit der gcc das auch frisst?

Danke und Gruß,
Philipp

Verfasst: 14. Januar 2008 15:37
von Volker
Wundert mich, dass das unter Windows übersetzt.
Da eine Referenz auf eine Variable nicht 0.0 sein kann, geht höchstens ein

Code: Alles auswählen

const double& Parametername  = 0.0

Verfasst: 14. Januar 2008 15:56
von Christian81
@Volker: msvc ist an dieser Stelle (leider) zu kulant und lässt es zu...

Verfasst: 14. Januar 2008 16:20
von RHBaum
die frage ist noch die version ...

bei mir zumindest beim VS 2005er mag ers auch ned ...

Ciao ...

Verfasst: 14. Januar 2008 19:43
von PhilippM
mhh, also unter windows kompiliere ich mit dem Gnu Make aus MinGW Version 3.81 und da geht es anstandslos.
Unter Linux mit gcc 4.2.1 hagelt es Fehlermeldungen.


Das interessante ist, dass es bei meinem Kollegen auf MAC OS ebengalls einwandfrei kompiliert (er zeigt allerdings warnings, wenn man sie explizit einschaltet). Meine Idee war daher, dass es vielleicht ein Flag gibt, was man setzen kann, dass der Compiler da etwas nachsichtiger ist.

Verfasst: 14. Januar 2008 21:24
von Christian81
Es ist definitiv falsch - warum sollte es dann noch ein Flag für geben?

Verfasst: 15. Januar 2008 09:24
von PhilippM
Okay, es ist also definitiv falsch, nur der windows-compiler ist zu dumm/nachsichtig, den Fehler anzukreiden.
Wie gesagt, unter MacOS gibts auch nur ne warning.

Dann werden wir das wohl mithilfe überladener Funktionen lösen müssen.