如果我帶班工作,一切都只是罰款:爲什麼我需要在模板繼承中使用範圍解析?
struct Base1 {
int value;
Base1(int value) : value(value) { }
};
struct Test1 : public Base1 {
int getValue() { return value; }
Test1(int value) : Base1(value) { }
};
但模板範圍分辨率需要:
template <typename T>
struct Base {
T value;
Base(T value) : value(value) { }
};
template <typename T>
struct Test : public Base<T> {
typedef Base<T> parent;
T getValue() { return parent::value; } // why do I need to use parent:: here?
Test(T value) : parent(value) { }
};
沒有範圍解析我收到錯誤'value' was not declared in this scope
(用gcc編譯器)。 爲什麼?
如果你定義Test如下:'Test Test:Public Base '? –
Brady
@Brady:然後我收到一個錯誤''Test'不是模板' - 模板必須在專門化之前創建。 –
@Brady:編譯器會給你一個錯誤。正確的C++語法是OP使用的語法。 – Gorpik