我有類似於下面的代碼,其中類模板有一個需要初始化的靜態變量。然後,我有一個使用私有,內部類作爲模板參數模板類的typedef:你如何初始化一個不可訪問模板類的靜態成員?
template <typename T>
class Foo
{
private:
static const char* s_name;
};
class Bar
{
private:
class Baz
{
// ...
};
typedef Foo<Baz> FooBaz;
};
我以爲我可以初始化這樣的靜態變量:
template<>
const char* Foo<Bar::Baz>::s_name = "foobaz";
和它的作品...在MS Visual Studio的2015年。然而,當我建立鏗鏘,我得到了一個錯誤如下所示:
Error 'Baz' is a protected member of 'Bar'
爲什麼這工作,MSVS,但不鐺?有沒有辦法來初始化這個變量,這兩個都可以使用?
簡單,使'Baz'公共名稱裏面'酒吧' – WhiZTiM
GCC也抱怨。我很確定MSVC是錯誤的,這個代碼不應該編譯。 –
MSVC在這裏是越野車。使用*任何*類名稱應該通過*成員訪問*支票 – WhiZTiM