Zugriff auf private-member von aussen doch möglich ?
-
Hallo,
Ich bin neu im Forum, und bin wirklich von
der großen community begeistert, hier scheint
wirklich irgendwer immer eine Antwort zu haben.
Deshalb meine Frage, ich konnte nirgends etwas zu diesem
Phänomen finden, vielleicht hat jemand schon mal etwas ähnliches
gesehen...Es geht um 2 Klassen, die beide von einer anderen Klasse abgeleitet
sind (nicht voneinander!). Ich hab die Member als private deklariert,
kann auf diese aber trotzdem von der anderen Klasse zugreifen, als
wären sie public. Das ist für mich eigentlich ziemlich unverständlich,
immerhin Programmiere ich jetzt schon seit 10 Jahren C/C++, und sowas
ist mir noch nicht untergekommen...Hier mal ein Beispiel:
class A { public: A(); }; class B : public A { public: B(); private: int i; }; class C : public A { public: C() { B b; b.i = 5; // Funktioniert !?! } };Ich benutze Visual Studio 6 (VC++ 6.0).
Vielleicht ist es auch nur irgendeine einstellung im Projekt
(Es ist nicht von mir, und ziemlich groß), so dass dieser Fehler
ignoriert wird... ?Vielleicht habt ihr ja eine Idee.
benth
-
Hi,
also bei mir wird das korrekt abgebrochen beim Compile .. sowohl vom VC6 also auch vom gcc.
Ich kann mir auch nicht vorstellen, dass es eine "abschaltbare Warnung" gibt. Ich könnte mir höchstens vorstellen, dass Dein Code gar nicht compiliert wird oder jemand ein lustiges "#define private public" eingebaut hat.
Oder ein "#define class struct" - ginge dann zwar mit explizitem "private:" nicht aber immerhin mit "implizitem".Spielt denn die gemeinsame Basis ("A") eine Rolle oder geht's auch ohne ?
Sind irgendwelche be-"friend"-ed ?Gruß,
Simon2.
-
Bei mir wird es auch mit folgenden errors abgebrochen:
test.cpp: In constructor »C::C()«: test.cpp:13: Fehler: »int B::i« ist privat test.cpp:22: Fehler: in diesem Zusammenhangmfg kaffee
-
Hi,
danke für die schnelle antwort!
Der Beispielcode würde bei mir warscheinlich
in nem neuen Projekt auch nicht kompilliert werden,
den richtigen code kann ich nur leider nicht posten...Er ist aber von der Struktur her genauso aufgebaut...
Dass mit den defines hört sich ziemlich interessant an,
obwohl ich mir das ehrlichgesagt nicht vorstellen kann.
(wär ja schon ziemlich heftig). Ich werd das projekt trotzdem
mal danach durchsuchen, vielleicht hat jemand versucht, sich die arbeit
"leichter" zu machen...Ich geb bescheid wenn ich's rausgefunden hab !
Gruß,
benth
-
OK...
meine schlimmsten Befürchtungen sind wahr geworden,
ich hab tatsächlich ein#define private publicgefunden!
Vielen dank für die Anteilnahme,
ich werf mich jetzt vor den nächsten Linienbus.
doch nicht.
Gruß,
benth
-
benth schrieb:
ich werf mich jetzt vor den nächsten Linienbus.

Wirf lieber den dafür verantwortlichen Programmierer vor den Bus!

-
#define 0 1
#define + -
#define private publicso macht entwickeln spass

-
#define << >>
#define int void
#define if else
#define { }
#define } {