gpt4 book ai didi

c++ - 接收错误 C2664 : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::vector<_Ty,_Ax> &' when passing vector to templated method

转载 作者:太空狗 更新时间:2023-10-29 21:04:15 24 4
gpt4 key购买 nike

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

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文件中quicksort的声明是:

排序.h

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

函数定义为:

排序.cpp

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

我是不是疯了?我只是想通过引用传递一个整数 vector 。谁能告诉我哪里出错了?

最佳答案

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

还有

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

关于c++ - 接收错误 C2664 : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::vector<_Ty,_Ax> &' when passing vector<int> to templated method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11603289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com