2011-09-05 30 views
1

我有一个帮助函数,它会创建一个Array_Ref obj。该函数有一个参数,vector<t> - 编译器正在抱怨。我正在使用VS2010。矢量<T>如何作为模板函数的函数参数被解析?

  • 我自己把函数放在了.h
  • 我把功能放在Array_Ref.h
  • 我把它放在.cpp文件中。
  • 我把typenamefront of vector<T>
  • 我把typedef typenamevector<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); 
} 
+0

矢量驻留在我相信的std名称空间中。尝试添加std :: vector之前 –

+0

什么是int s参数?另外,正如其他人指出的 - 我们不知道什么是Array_Ref。也许它也存在于它自己的命名空间中,并且应该是合格的? – Tomek

回答

6

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

+0

谢谢。愚蠢的错误在我身上。我添加了std ::并且它工作。 – EbbnFlow

+0

嗯说话太快 - 道歉。 – phooji

3

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