数据成员'vec'不能成为成员模板
为了声明包含模板的矢量,我在头文件中有以下两行:
template <class t>
std::vector <t> vec;
但是,我得到以下错误:数据成员'vec'不能成为会员模板我做错了什么? 编辑:我不知道我的理解正确,我试图声明一个包含模板的向量,我知道可以这样做,因为可以具有以下内容:
template <class T>
void funct(vector <T> v){
}
这个函数接受一个模板的向量作为它的参数,我希望做同样的事情,除了在头中声明向量以允许向量包含任何东西。
template <>
语句仅在声明函数模板或类模板时使用。 例如,您可以在声明(并定义)一个类时使用它:
template <typename T>
class TemplateClass {
/* definition */
};
或者一个功能:
template <typename T>
void templateFunc(T value) {
/* definition */
}
创建类的实例时,不能使用template <>
语句。 相反,你可以像这样指定一个模板参数:
TemplateClass<int> tc;
当调用模板函数时:
int i = 1;
templateFunc(i); // <-- Automatic template deduction to int.
这种矢量不能包含任何东西。 假设一个编译器让你声明这样一个向量,并且你写了一个类似的代码
//...
A Aobj;
vec.push_back(Aobj);
//...
那么vec中的一个元素的大小将是sizeof(A)
。 但接下来你写道
//...
B Bobj;
vec.push_back(Bobj);
//...
这里一个元素的大小应该是多少?
无论如何,作为一种解决方法,您可以声明vector<void*> vec
这将包含指向您想要的任何内容的指针。
Vector总是需要一个类T作为模板。 但模板应该放在类声明之前。
你可能是说
template<class T>
class A {
private:
std::vector<T> vec;
};
链接地址: http://www.djcxy.com/p/73519.html