#include <iostream>
#include <string>
class Base
{
static std::string s;
};
template<typename T>
class Derived
: Base
{
public:
Derived()
{
std::cout << s << std::endl;
}
};
std::string Base::s = "some_text";
int main()
{
Derived<int> obj;
}
Dieses Programm kompiliert und läuft normal. Die statische Variable s
ist privat in der Basisklasse, die privat vererbt wird. Wie greift die Derived-Klasse darauf zu?Private statische Mitglied in der Basisklasse
Wenn die abgeleitete Klasse keine Vorlage ist, beschwert sich der Compiler über den Zugriff auf private Variable.
[[email protected] c++]$ g++ --version
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Welcher Compiler? gcc, klingeln? –
Beim Lesen dieser Frage könnte jemand erklären, warum der Compiler die Zeile 'std :: string Base :: s = "some_text" nicht für möglich hält. ist globaler Zugang, also für eine private Variable verboten? Es ist schon einige Zeit her, dass ich C++ benutzt habe. –
Das ist eine Definition, keine Deklaration. Es initialisiert nur die Zeichenfolge, die zuvor in Base deklariert wurde. Da es innerhalb von Base deklariert wurde, handelt es sich um eine statische Klassenvariable, die privat ist, da dies die Standardzugriffsebene für die Klasse ist. –