【发布时间】:2013-11-04 09:03:09
【问题描述】:
我有以下代码:
template<class T>
class TemplateA : public virtual std::list<T>
{
protected:
unsigned int iSize;
public:
unsigned int getSize();
};
/////////////
template<class T>
unsigned int TemplateA<T>::getSize()
{
return iSize;
}
/////////////
/////////////
/////////////
template<class T>
class TemplateB : public TemplateA<T>
{
public:
unsigned int calcSize();
};
/////////////
template<class C>
unsigned int TemplateB<C>::calcSize()
{
iSize = C.getSize;
return iSize;
}
/////////////
/////////////
/////////////
// Class C (seperate file) has to contain function getSize()
class CMyClass
{
public:
static const unsigned int getSize = 5;
};
这意味着,我想在类 TemplateB 中调用 getSize 方法,该方法已被传递的类定义。
我收到以下错误消息:
error C2275: 'C' : illegal use of this type as an expression
while compiling class template member function 'unsigned int TemplateB<C>::calcSize()'
1> with
1> [
1> C=CMyClass
1> ]
我很确定这个函数在 VS 2003 下可以工作......这个方法有什么问题?也许是编译器设置?我不知道在哪里设置什么:(
【问题讨论】:
-
顺便说一句,不鼓励从标准容器继承,因为它们(故意)非虚拟析构函数。
标签: c++ visual-studio-2010 templates visual-studio-2003