T不是一个类,但它是

时间:2010-09-01 19:32:02

标签: c++ templates

为什么这不起作用? (为了他们的缘故!)

template<class T>
class A
{
    typedef typename T::value_type value_type;
public:
    A();
};

我收到了以下错误:
错误1错误C2825:'T':当后跟'::

时必须是类或命名空间

但是T是一个班级,我刚刚指定那不是我吗?那么问题是什么呢? 感谢。

4 个答案:

答案 0 :(得分:7)

T可以是原始类型,具体取决于您实例化模板的方式......

答案 1 :(得分:2)

您在哪个模板专业化中遇到此错误?也许你在代码中的某个地方做A<int>之类的事情。如果您想获得更好的信息,请提供有关产生错误的专业化的更多信息。

答案 2 :(得分:2)

'class'关键字在用于指定模板类型参数时具有不同的含义。事实上,template<class T>template <typename T>完全等同,T可以是任何类型。写template<class T>绝不告诉编译器T应该只是一个类类型。

答案 3 :(得分:0)

仅供参考:如果在从模板实际创建具体类时遇到相关问题,Visual C ++只会抛出此类错误。您应该能够从错误消息中轻松确定发生的位置,并查看该代码可能会帮助您解决此类问题。