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