Überladen von Funktionen
-
Habe da ein Problem
#include <stdio.h>
float abs(float a) {
if(a<0) {
return -a;
} else {
return a;
}int main() {
printf("%f",abs(45.5));
return 0;
}
}Bei diesem Code bringt mir mein Compiler eine Fehler für die Zeile, in der die Main-Methode beginnt. Der Fehler lautet: Lokale Funktionsdefinitionen sind unzulaessig
Weiß jemand was hier falsch ist??
-
Du definierst die main Funktion in der ABS Funktion. Das funktioniert nicht. Nimm mal die letzte Klammer weg und pack das vor die main Funktion.
BTW: Das hat nix mit Überladen zu tun. Überladen bedeutet, dass du mehrere Funktionen mit gleichem Namen hast, die sich lediglich von den Parametern unterscheiden.
-
Stimmt hab die Klammer total übersehen zu setzen! Hat schon was mit überladen zu tun, da es in der stdlib eine Methode abs für int gibt! Außerdem muß ich die Funktion auch noch für long double schreiben!
Thx nochmal
-
Also imho ist das schon überladen.
http://www.cplusplus.com/ref/cstdlib/abs.html
Du solltest nach Möglichkeit cstdlib statt stdlib.h benutzen.Ansonsten würd ich dir empfehlen, vielleicht mal templates zu nutzen, damit du nicht für jeden Typen eine eigene Funktion schreiben musst.
-
Überladen wird es erst wenn du
#include <math>
schreibst.
-
#include <math> wird wohl nicht helfen
entweder math.h oder cmath
-
Wie schon gesagt.
include <math>
Kann sein das alte Compiler sowas noch nicht schlucken.
-
Hallo Troll (?),
siehe Windalfs Beitrag.
-
Das Hallo geht an dich Troll zurück.
Compile das mal mit CBuilder dann siehst du es.
Obertroll ....
-
hey leute bleibt entspannt nur weil der eine compiler samt lib den standard anders umsetzt als ein anderer muss man nicht gleich aus der haut fahren...
Es kann ja nicht jeder jeden compiler kennen und "den-ansi-c/c++-compiler" gibts nun mal nicht...
-
franko schrieb:
Das Hallo geht an dich Troll zurück.
Compile das mal mit CBuilder dann siehst du es.
Obertroll ....Exakt, aber das geht _nur_ bei Borland, also ist der Hint zwecklos und man sollte
es tunlichst vermeiden.mfg
v R
-
Hallo,
deswegen das Fragezeichen dahinter. Wir reden hier vom Standard, und da heisst es entweder cmath oder math.h. Außerdem kann kein Mensch wissen, dass du den CBuilder benutzt, denn dafür gibts nen eigenes Forum.
-
Kann mir aber nicht vorstellen, das nur der CBuilder das so schluckt.
Wenn dem so ist, bitte nicht schlagen.
-
franko schrieb:
Kann mir aber nicht vorstellen, das nur der CBuilder das so schluckt.
Tja, is aber so ...
-
Dann nehm ich es zurück.
Es heisstinclude <math.h>
-
franko schrieb:
Kann mir aber nicht vorstellen, das nur der CBuilder das so schluckt.
Wenn dem so ist, bitte nicht schlagen.Der gcc sagt:
test2.cc:2: math: No such file or directory
Borland hat immer ein paar extra Dinge in seinem Sandkasten, wenn dann jemand
math statt cmath schreibt, funktioniert das Programm dann immernoch wie gewollt.Nur wenn man es dann durch einen anderen Kompiler jagt, siehts dann anders aus.
Achja und schlagen tun wir hier eh keinen
mfg
v R
-
franko schrieb:
Dann nehm ich es zurück.
Es heisstinclude <math.h>
Nach dem neuen Standard heisst es
[cpp]**#**include <cmath>[/cpp] ...
-
*rofl*
-
was lachste?
-
Borland ist eben sehr tollerant ... nich so wie microsoft ... VC++ will ja immer alles besser wissen als der benutzer