Verbung und Variablen
-
ups, falsch verstanden...

was mein vorredner meint ist:
class XX{ protected: static int a; }; class YY : public XX{ };somit ist XX::a nur ein einziges mal im system vorhanden bzw. in dem prozess.
-
hää??? und was ist nun?? hmm gut hab wohl recht ...
-
Wenn ich die Variable mit Static deklariere bekomme ich haufenweise Linker Error, wegen unaufgelösten Verweisen. Veilleicht liegt es daran, dass es bei mir eine ganze Struktur ist?
class XX{ protected: static struct direntries{ queue<string> aBilder, copy_aBilder; int count; }direntries; }; class YY : public XX{ };Aber wie greif ich nun darauf zu, ohne die unaufgelösten Verweise zu bekommen?
-
Der Zugriff ist schon richtig über "XX::direntries", allerdings mußt du die Variable noch definieren:
//an einer zentralen Stelle im Programm: struct XX::direntries XX:direntries;(übrigens ist es eine sehr schlechte Idee, für den struct-Typ und die Variable den selben Namen zu verwenden)
-
Leider funktioniert das alles irgendwie nicht richtig. Ich hab jetzt deshalb mal ein kleines Beipielprogramm geschrieben. Villeicht /Hoffentlich kann mir jemand sagen, wo der Fehler liegt.
////////// //main.cpp #include <iostream> #include "k.cpp" int main() { KLASSE1 kl1; KLASSE2 kl2; kl1.t1(); kl2.t2(); return 0; } ////////// //k.h class KLASSE1{ public: void t1(void); protected: static struct alpha{ char* a; char* b; }; }; class KLASSE2 : public KLASSE{ public: void t2(void); }; ////////// //k.cpp #include <iostream> using namespace std; #include "k.h" void KLASSE1::t1(void) { KLASSE1::alpha.a = "erstens"; KLASSE1::alpha.b = "zweitens"; } void KLASSE2::t2(void) { cout << KLASSE1::alpha.a<< "\n" << KLASSE1::alpha.b; }Ich bekomme folgende Fehlermeldungen:
In file included from k.cpp:5,
from main.cpp:2:
k.h:10: error:static' can only be specified for objects and functions k.h:15: error: expected class-name before '{' token In file included from main.cpp:2: k.cpp: In member functionvoid KLASSE1::t1()':
k.cpp:9: error: expected primary-expression before '.' token
k.cpp:10: error: expected primary-expression before '.' token
k.h: In member functionvoid KLASSE2::t2()': k.h:7: error:struct KLASSE1::alpha' is protected
k.cpp:15: error: within this context
k.cpp:15: error: expected primary-expression before '.' token
k.h:7: error: `struct KLASSE1::alpha' is protected
k.cpp:15: error: within this context
k.cpp:15: error: expected primary-expression before '.' token
-
/edit
Wenn ich das struct in public lege, verschwinden schon mal die "is protected" Fehler. Der Rest bleibt. btw müsste ich aber doch auf protected Zugriff haben?
-
Erstens: .cpp's solltest du nicht per #include einbinden - in der main.cpp reicht ein
#include "k.h"Zweitens: Du hast dort einen statischen Untertyp definiert - sowas mag C++ nicht. Besser sieht es so aus:
class Klasse1 { ... protected: struct alpha_t { char*a,*b;} static alpha_t alpha; };Drittens: Ich wurde vor einer Weile belehrt, daß abgeleitete Klassen nur die "eigene" Instanz von protected-Membern verwenden dürfen. Und innerhalb der Klassen ist es auch eindeutig, welche Variable gemeint ist, also kannst du dort das "Klasse1::" weglassen.
Viertens: Und in der k.cpp fehlt noch ein Eintrag:
Klasse1::alpha_t Klasse1::alpha;
-
Soweit hab ich alles verstanden und ist auch klar. Wenn ich allerdings in der main ein #include "k.h" setze, bekomme ich unaufgelöste Verweise zu den Funktion.
Könntest du mal bitte den kompletten richtigen Code posten?

-
Du mußt die beiden CPP-Files auch getrennt compilieren und dann vom Linker zusammenführen lassen (welchen Compiler verwendest du? davon hängt es ab, wie du das machen mußt).
-
Ich benutze g++.
-
Alles klar, vielen Dank.
Habs hinbekommen.