如何将vector <t>解析为模板化函数的函数参数?</t>

时间:2011-09-05 18:36:27

标签: c++ templates

我有一个辅助函数,可以创建一个Array_Ref obj。该函数有一个参数vector<t> - 编译器正在抱怨。我正在使用VS2010。

  • 我将该功能单独放在.h中。
  • 我将该功能放在Array_Ref.h
  • 我把它放在.cpp文件中。
  • 我将typename放入front of vector<T>
  • 我将typedef typename放在vector<T>
  • 前面

似乎没什么用。


#include <vector>
template<class T>
Array_Ref<T> make_ref(vector<T> &v, int s)
{
    return (v.size()) ? Array_Ref<T>(v,s): Array_Ref<T>(0,0);
}

我得到了:

error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed.
error C2988: unrecognizable template declaration/definition
error C2059: syntax error : '<'

但是,将它放在与Array_Ref.h相同的头文件中可以正常工作:

template<class T,int size>
Array_Ref<T> make_ref(T (&p)[size])
{
    return (p) ? Array_Ref<T>(p,size): Array_Ref<T>(0,0);
}

2 个答案:

答案 0 :(得分:6)

它是std::vector,而不是vector。此外,您似乎没有在任何地方定义Array_Ref

答案 1 :(得分:3)

可能缺少std命名空间?将vector更改为std::vector(避免在头文件中使用命名空间指令)。