Statische Klasse
-
Kann mir mal einer sagen warum es nicht möglich ist, dass äußere und innere Klasse den gleichen Namen haben ?
class Test { public: static void ausgabe( ) { cout<<"Hello_Test_Außen"<<endl; } class Test // hier Fehler { public: static void ausgabe() { cout<<"Hello_Test_Innen"<<endl; } }; };
-
Ja.
-
Der Aufruf für die innere Klasse wäre ja
Test::Test::ausgabe() ;Für die äußere Klasse wäre der Aufruf
Test::ausgabe();Ist doch absolut eindeutig ????
-
Dein Compiler gibt also "hier Fehler" aus? Interessant ...
-
Ja, find ich auch geil.
Will dann en Compiler der "Kanackk"-Deutsch spricht

-
Die Abfrage ist doch eindeutig. Also was passt dem Compiler hier nicht ?
-
blurry333 schrieb:
Die Abfrage ist doch eindeutig. Also was passt dem Compiler hier nicht ?
woher sollen wir wissen, was der Compiler dir sagt?
-
Dass die beiden Klasse nicht gleich heißen dürfen !!
-
class Test { public: static void ausgabe( ) { cout<<"Hello_Test_Außen"<<endl; Test::ausgabe(); // Welches ist gemeint? } class Test { public: static void ausgabe() { cout<<"Hello_Test_Innen"<<endl; } }; };
-
MS-Compiler schrieb:
error C3769: 'Test' : a nested class cannot have the same name as the immediately enclosing class
Versuche doch einfach mal eine Methode in der Klasse
Test(outer) zu schreiben, die als Parameter einTest-Objekt erwartet und dann eine zweite, die einTest::Test-Objekt erwartet erwartet.
Wie unterscheiden sich die beiden?
-
Und was soll da jetzt nicht passen ? Kann man doch unterscheiden ?
class Test { public: static void ausgabe( ) { cout<<"Hello_Test_Außen"<<endl; Test::ausgabe(); // Welches ist gemeint? } static void funk1(Test obj) { } static void funk1(Test::Test obj) { } class Test { public: static void ausgabe() { cout<<"Hello_Test_Innen"<<endl; } }; };
-
blurry333 schrieb:
Und was soll da jetzt nicht passen ? Kann man doch unterscheiden ?
Nein...
Deine Funk1 die ein Test obj erwartet. Welches Test ist gemeint? Das äußere oder das innere?
-
Nur um das Anzumerken:
Test::Testwäre (von außerhalb wie von innerhalb) dasselbe wieTest, Stichwort injected-class-name.Aber das ist sowieso nicht erlaubt.