我在我的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的向量。有人能告诉我哪里出错了吗?
答案 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如何制作模板函数。 问题是,编译器在使用之前必须知道整个函数,并且他不会在你的情况下