C++ C++;带有std::array的模板函数
我有以下功能:C++ C++;带有std::array的模板函数,c++,arrays,c++11,templates,C++,Arrays,C++11,Templates,我有以下功能: template <typename T, size_t SIZE> void minSortLoop(array<T, SIZE>& a){ for(size_t o = 0; o < SIZE; o++) { size_t minIx = 0; for(size_t i = o + 1; i < SIZE; i++) { if(a[i] < a[minIx]) {
template <typename T, size_t SIZE>
void minSortLoop(array<T, SIZE>& a){
for(size_t o = 0; o < SIZE; o++) {
size_t minIx = 0;
for(size_t i = o + 1; i < SIZE; i++) {
if(a[i] < a[minIx]) {
minIx = i;
}
}
swap(a[o], a[minIx]);
}
}
模板
void minSortLoop(数组和a){
对于(大小\u t o=0;o
我喜欢从其他地方打电话给它,比如:
std::array<int, 3> arr = {3,1,-9};
minSortLoop(arr);
std::array arr={3,1,-9};
minSortLoop(arr);
但我得到了错误:
说明资源路径位置类型无效参数的候选项
are:void minSortLoop(?&)Test.cpp/gTest第23行语义错误
说明资源路径位置类型没有用于调用的匹配函数
至'minSortLoop(std::array*)Test.cpp/gTest第23行C/C++
问题
如何正确调用排序函数
致意:-)
PS:我不允许使用std::sort
编辑1: @弗朗索瓦·莫桑: 我试着通过其他方式,比如:
std::array<int, 3> arr = {3,1,-9};
minSortLoop(&arr);
std::array arr={3,1,-9};
minSortLoop(&arr);
有误:
说明资源路径位置类型无效参数的候选项
are:void minSortLoop(?&)Test.cpp/gTest第23行语义错误
说明资源路径位置类型没有用于调用的匹配函数
至'minSortLoop(std::array*)Test.cpp/gTest第23行C/C++
问题
以及:
std::array arr={3,1,-9};
minSortLoop(*arr);
有误:
说明资源路径位置类型无效参数的候选项
are:void minSortLoop(?&)Test.cpp/gTest第23行语义错误
说明资源路径位置类型与“operator*”不匹配
(操作数类型为'std::array')Test.cpp/gTest行23 C/C++
问题
不知道怎么称呼这个。参考文献中有我的第一个例子
@塔德曼:
我需要通过这个尺寸。从任务描述中可以看出:-(
@Jarod42:这是哪个编译器?我在Windows7下的eclipse中使用Cygwin
@帕萨萨:是的,我编译了它,或者至少我尝试了。它会导致所描述的错误
编辑2: 正如@pasasap在其中一条评论中提到的,问题似乎是因为eclipse。有人知道一个不关闭cody analysis的解决方案吗?应该是这样的
std::array<int, 3> arr = {3,1,-9};
minSortLoop(arr); // not *arr or &arr
std::array arr={3,1,-9};
minSortLoop(arr);//非*arr或&arr
问题是我的IDE Eclipse。一旦我关闭了代码分析功能,它就会按预期编译。您的错误表明数组应该通过指针传递,但您的代码似乎是引用的。为什么排序函数会关心大小
?如果它想知道它会问:a.SIZE()
。即使不允许您使用std::sort
您也应该编写以相同方式操作的内容,使用相同的接口。像这样实现它会带来麻烦。按预期编译(即使它没有给出预期的输出).您是否使用eclipse?您是否尝试编译它?请您的问题提供一个答案。这正是我在第一个示例中尝试的(见上文)。正如@pasasap所提到的,问题似乎是eclipse。有什么办法解决这个代码分析错误吗?我一直在搜索,但还没有找到任何合适的答案。你启用了c++11或c++14吗?我尝试启用c++11,但我已经再次禁用了它,因为它也会导致错误。你应该至少使用c++11(对于std::array
).i当前使用-std=gnu++0x,它应该是类似于c++11的IIRC。
std::array<int, 3> arr = {3,1,-9};
minSortLoop(arr); // not *arr or &arr