Я делаю следующие заявления:
class Servo {
protected:
static const int maxServos = 16;
static Servo servos[maxServos]; //Array declaration
};
Servo Servo::servos[Servo::maxServos]; //Array definition
... и он компилируется, и это здорово! Но я не понимаю, почему он компилируется, потому что мне кажется, что maxServos защищен, и я использую его в глобальной области видимости, когда определяю массив. Я попытался использовать его в другом глобальном контексте, и действительно я получил ошибку компиляции:
int main() {
std::cout << Servo::maxServos; //This will not compile.
}
Так что же происходит? Является ли все определение массива каким-либо образом ограниченным пространством имен, определяющим массив? Это глюк компилятора?
Я использую g ++ -std :: c ++ 11 на Raspberry PI с использованием Lubuntu 16.04 O / S.