数据成员'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

上一篇: data member 'vec' cannot be a member template

下一篇: Run dynamically generated assembly in C (GNU/Linux)