Warum kann man keine Variable definieren, die wie eine Funktion heißt?
-
class BEISPIEL221 { private: bool machwas(); bool machwas; };Wieso kann der Kompilierer nicht Variable von Funktion unterscheiden?
-
<html><head></head> <body> <div id="1" onclick="foo('hallo')">click</div> </body> <script> function foo(text) { foo = 5; alert(foo); foo = function() { alert('foo'); } foo(); } </script> </html>Javascript rult dich weg.
-
Ganz einfach - alle Bezeichner liegen im selben Namensraum, also kannst du in einem gegebenen Scope jeden Namen nur einmal verwenden (schließlich muß der Compiler wissen, was sich hinter dem Namen verbirgt).
(die Möglichkeiten zur Überladung sind eine Aufweichung dieses Prinzips, aber solange der Compiler nur mit Funktionen zu tun hat, kann er die Unterscheidung anhand der Parameter hinbekommen - Variablen haben keine Parameter und können deshalb auch nicht per Überladungs-Auflösung unterschieden werden)
-
CStoll schrieb:
...
(die Möglichkeiten zur Überladung sind eine Aufweichung dieses Prinzips, aber solange der Compiler nur mit Funktionen zu tun hat, kann er die Unterscheidung anhand der Parameter hinbekommen - Variablen haben keine Parameter und können deshalb auch nicht per Überladungs-Auflösung unterschieden werden)Naja, aber genau darauf zielt doch die Frage ab. Wenn der Compiler diverse Funktionen anhand ihrer Signatur "ver-mangle-t", könnte er das mit Variablen auch tun. Unterscheiden kann er das ja sowieso....
Ich würde eher sagen: Die Ausgangsfrage ist falsch !
Die Deklaration/Definition einer Funktion IST bereits die Deklaration/Definition einer Variablen ... und zwar vom Typ eines entsprechenden Funktionspointers.
Das hier:typedef int myType; myType mt = 1; int main() { myType a = mt; cout << a; }entscheidet sich strukturell nicht von
typedef int (*myFunc)(int); int mf(int i) { cout << "mf(" << i << ")\n"; return i+1; } int main() { myFunc a = mf; a(1); }Gruß,
Simon2.