6
編譯一些代碼時,我遇到了一個編譯器錯誤,這對我來說似乎很陌生,涉及到繼承,嵌套類,聲明和訪問修飾符。使用聲明和訪問修飾符的嵌套類
基本上,意圖是派生類型公開嵌套的基類型的受保護的類。
在以下短例子來說明這個問題:
class Base
{
protected:
struct Nested
{
enum value_enum
{
val = 0,
val2,
val3
};
};
};
class Derived : public Base
{
public:
using Base::Nested;
};
int main(int argc, char** argv)
{
//Base::Nested aa; // error, as (I) expected
//Base::Nested::value_enum ab; // error, as (I) expected
Derived::Nested ba; // works, as (I) expected
Derived::Nested::value_enum bb; // MSVC error, as (I) did not expect
return 0;
}
見live。
MSVC11(v11.00.61030)這個代碼與扼流圈以下錯誤:
error C2248: 'Base::Nested' : cannot access protected struct declared in class 'Base'
GCC和Clang的編譯這個正確的,所以不從標準引用相關部件的能力,我認爲這是一個MSVC錯誤。
有沒有解決這個MSVC的方法?
我想獲得在編譯時錯誤比對後一種問題,運行更好。 –
由於其受保護,通過標準主要功能將無法訪問它 –
@AliKazmi什麼是保護? 'Derived'改變'Nested'的訪問修飾符;在這種情況下它不受保護。而且,'value_enum'在'Nested'內不受保護。 – namezero