template<int N>
struct B
{
protected:
void f() {}
};
template<int N>
struct A : B<N>
{
A()
{
this->f(); // ok
f(); // error : use of undeclared identifier 'f'
}
};
int main()
{
A<8> a;
}
我的C++編譯器是叮噹3.8。爲什麼clang不允許派生類調用受保護的基函數?
爲什麼clang不允許派生類調用受保護的基函數?
使用'B :: f()',這不是特定的鏗鏘聲。 –
'this-> f();'或'B :: f()' – Danh
受保護的成員不像私有成員那樣私有,只能爲聲明它們的類的成員訪問,但它們不是公開爲公衆成員,可以通過任何功能訪問。 未聲明爲靜態的受保護成員只能通過派生類的指針,引用或對象訪問派生類中的朋友和成員函數。 –