Possible Duplicate:
GCC problem : using a member of a base class that depends on a template argument在模板類中定義的常量
我以爲我熟悉C++,但顯然不夠熟悉。
問題是當你在一個模板類中定義一個常量時,你可以在該類中派生的新類中使用該常量,但不能從該派生類中使用新的模板。
例如,GCC說
test.h:18: error: ‘theconstant’ was not declared in this scope
當我嘗試編譯此(簡化)頭文件:
#pragma once
template <typename T> class base
{
public:
static const int theconstant = 42;
};
class derive1 : public base<size_t>
{
public:
derive1(int arg = theconstant) {}
};
template<typename T> class derive2 : public base<T>
{
public:
derive2(int arg = theconstant) {} // this is line 18
};
所以問題是一個類,derive1
,編譯罰款,但其他職業,derive2
,這是一個模板專業化,沒有。
現在可能gcc的錯誤還不夠清楚,但我不明白爲什麼derive2
中的構造函數與derive1
中的構造函數不同。
萬一它很重要,這在編譯頭文件本身時發生,而不是在實例化derive2<type>
類型的對象時發生。
我也知道該如何改變才能編譯,所以我並不真正尋找單行代碼作爲答案。我想了解爲什麼發生這種情況!我試圖搜索網頁,但顯然我沒有使用正確的搜索參數。
FWIW,這個代碼在VC++ 2010中編譯得很好。這可能是GCC中的一個bug ... – dsharlet
'derive2(int arg = base :: theconstant){}'編譯得很好。 –
jrok
@dsharlet - 不是GCC的一個bug,如規範中所述。 – Flexo