接收错误C2664:无法从'std :: vector&lt; _Ty&gt;'转换参数1到'std :: vector&lt; _Ty,_Ax&gt; &安培;”将vector <int>传递给模板化方法</int>时

时间:2012-07-22 19:20:55

标签: c++ templates

我在我的cpp函数中引用了一个模板化的quicksort方法,如下所示:

Main.cpp的

QuickSort<vector<int>>(testData);

testData是:

int arr[] = {0, 5, 3, 4, 2, 1, 4};
vector<int> testData (arr, arr + sizeof(arr) / sizeof(arr[0]));

.h文件中的快速排序声明是:

Sorting.h

template <typename T>
void QuickSort(std::vector<T>& Unsorted);

功能定义是:

Sorting.cpp

template <typename T>
void QuickSort(std::vector<T>& Unsorted) 
{
         //implementation here
}

我是否会失去理智?我只是试图通过引用传递一个int的向量。有人能告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:4)

模板不能有单独的定义和声明

QuickSort<int>(vec);

如果函数声明和定义必须在saem位置,即:

#include <vector>

template <typename T>
void qs(std::vector<T>&v );

int main() {
  std::vector<int> v;
  qs(v);
}


void qs(std::vector<T>&v ) { 
}

不会编译,何时

#include <vector>

template <typename T>
void qs(std::vector<T>&v ) {}

int main() {
  std::vector<int> v;
  qs(v);
}

编译得很好,检查stl如何制作模板函数。 问题是,编译器在使用之前必须知道整个函数,并且他不会在你的情况下