带有std :: array

时间:2016-11-16 23:01:41

标签: 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]) {
                minIx = i;
            }
        }
        swap(a[o], a[minIx]);
    }
}

我喜欢从其他地方拨打电话,如:

std::array<int, 3> arr = {3,1,-9};
minSortLoop(arr);

但是我得到了错误:

  

描述资源路径位置类型无效参数'候选者   是:void minSortLoop(?&amp;)'Test.cpp / gTest line 23语义错误

     

描述资源路径位置输入没有匹配的呼叫功能   to'minSortLoop(std :: array *)'Test.cpp / gTest line 23 C / C ++   问题

如何正确调用我的排序功能?

最好的问候: - )

PS:我不允许使用std :: sort。

编辑1:

@FrançoisMoisan:

我试图通过其他方式传递:

std::array<int, 3> arr = {3,1,-9};
minSortLoop(&arr);

有错误:

  

描述资源路径位置类型无效参数'候选者   是:void minSortLoop(?&amp;)'Test.cpp / gTest line 23语义错误

     

描述资源路径位置输入没有匹配的呼叫功能   to'minSortLoop(std :: array *)'Test.cpp / gTest line 23 C / C ++   问题

std::array<int, 3> arr = {3,1,-9};
minSortLoop(*arr);

有错误:

  

描述资源路径位置类型无效参数'候选者   是:void minSortLoop(?&amp;)'Test.cpp / gTest line 23语义错误

     

描述资源路径位置类型与'operator *'不匹配   (操作数类型是'std :: array')Test.cpp / gTest第23行C / C ++   问题

不确定如何调用它。引用建议类似我的第一个例子here

@tadman:

我需要传递大小。这是从任务描述中给出的: - (

@ Jarod42:这是哪个编译器?我在Windows 7下的eclipse中使用了Cygwin。

@pasasap:是的,我编译了它,或者至少我尝试过。它导致所描述的错误。

编辑2:

正如@pasasap在其中一条评论中提到的,似乎问题是因为eclipse。有没有人知道解决方案而不关闭cody分析?

2 个答案:

答案 0 :(得分:0)

应该只是

std::array<int, 3> arr = {3,1,-9};
minSortLoop(arr); // not *arr or &arr

答案 1 :(得分:0)

问题是我的IDE Eclipse。一旦我关闭了它按预期编译的代码分析功能。