ho il seguente codice:g ++ errore di compilazione "... è protetto da in questo contesto", mentre non c'è nessun errore con clang
#include <iostream>
class BaseClass {
protected:
static int x;
};
int BaseClass::x;
class DerivedA: public BaseClass {
public:
DerivedA() {
x = 3;
}
};
class DerivedB: public BaseClass {
public:
DerivedB() {
std::cout << DerivedA::x;
}
};
int main(int argc, char* argv[]) {
DerivedB b;
}
Compilare con g ++ (g++ classtest.cpp
) ricevo il seguente errore:
classtest.cpp: In constructor ‘DerivedB::DerivedB()’:
classtest.cpp:9:5: error: ‘int BaseClass::x’ is protected
int BaseClass::x;
^ classtest.cpp:25:32: error: within this context
std::cout << DerivedA::x;
Quando compilo con clang ++ (clang++ classtest.cpp
) non ci sono errori.
Perché g ++ restituisce l'errore di compilazione?
Io uso g ++ versione 5.1.0 e clang ++ versione 3.6.1
Compilare anche in MVS2015 – Zereges
Sono più sorpreso del fatto che il clang ** non sia ** lanciando un errore ... Ma posso confermare, non lo è. –
@DrewDormann Perché? Sono sorpreso dall'errore: nonostante 'DerivedA ::', in realtà accede a un membro protetto di 'BaseClass', da una classe derivata da' BaseClass'. – hvd