3

我在我的 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 文件中快速排序的声明为:

排序.h

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

函数定义为:

排序.cpp

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

我失去理智了吗?我只是想通过引用传递一个整数向量。有人能告诉我哪里出错了吗?

4

1 回答 1

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 中检查模板函数是如何制作的。问题是,编译器必须在使用之前知道整个函数,而在你的情况下他不知道

于 2012-07-22T19:24:51.577 回答