3
template<class T>
class TBase
{
public:
typedef int Int;
struct TItem
{
T Data;
};
int value;
};
template<class T>
class TClass:public TBase<T>
{
public:
TBase<T>::TItem item; // error here. only when using type defined in base class.
void func()
{
TBase<T>::value ++; // no error here!
}
};
int main(int argc, char *argv[])
{
TClass<int> obj;
return 0;
}
在VC和Borland C++編譯器中,它們都可以編譯它。但gcc無法編譯它,因爲它使用了兩次來處理模板事情。 VC或BCB不關心未知的模板名稱。有什麼辦法可以抑制gcc的這個功能嗎?謝謝!gcc模板繼承問題
typename TBase<T>::TItem item;
此鏈接提供了一個解釋:http://pages.cs.wisc.edu/~driscoll/typename.html
爲什麼不使用'this->'作爲函數。對於另一個它應該是'struct TBase :: TItem' –
mathk