1

在我正在进行的一个项目中,我正在制作一个带有指向模板类的指针的向量。

 template <typename T>
 std::vector<templateClass<T>*> vec;

但是,这给了我两个错误:

Error C2133: vec : unknown size
Error C2998: std::vector<templateClass<T>*> vec : cannot be a template definition

如果我将代码更改为:

std::vector<templateClass<int>*> vec;

它工作得很好,所以我想问题不在于你不能使用带有向量的模板类,而是你需要告诉编译器使用什么类型。有没有办法解决?

4

4 回答 4

2

创建类实例时,您必须选择类型。在定义中你可以写 T 但在创建实例时你必须指定类型。

因此,如果您想定义而不是创建实例,请使用typedef.

于 2012-04-06T09:07:35.677 回答
1

您不能拥有模板化成员。
模板必须来自类或函数模板化声明。

template <typename T>
class blah {
     std::vector<templateClass<T>*> vec;
}

编译器需要在代码中的某处定义模板化类型名,例如:blah<int>

如果你有一个模板化的成员,你就不能在代码的任何地方定义类型,编译器也不能决定成员的类型。

模板类型名是在您第一次使用函数或类(显式或隐式)时决定的,因此您必须在调用代码可访问的某个地方拥有模板定义和实现。

于 2012-04-06T09:11:49.103 回答
1

看起来您正在尝试将新类型定义vec<T>为更长的模板化表达式的快捷方式。通常,这将使用 来完成typedef,但是 C++ 不支持模板化类型定义。

请注意,在当前代码中,您实际上是在尝试定义一个名为 的变量vec,但您没有为它赋予 T 的特定类型,这就是编译器抱怨的原因。

于 2012-04-06T09:17:34.930 回答
1

目前 C++ 不支持模板类型定义,因此您必须使用 Herb Sutter 提出的最常见的解决方案 (http://gotw.ca/gotw/079.htm)

于 2012-04-06T09:21:52.420 回答