簡體   English   中英

具有std :: array的C ++模板函數

[英]C++ template function with std::array

我有以下功能:

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(?&)'Test.cpp / g測試行23語義錯誤

說明資源路徑位置類型無匹配函數可調用'minSortLoop(std :: array *)'Test.cpp / g測試行23 C / C ++問題

如何正確調用排序函數?

最好的祝福 :-)

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


編輯1:

@弗朗索瓦·莫伊桑(FrançoisMoisan):

我試圖以其他方式通過:

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

錯誤:

說明資源路徑位置類型無效的參數'候選者為:void minSortLoop(?&)'Test.cpp / g測試行23語義錯誤

說明資源路徑位置類型無匹配函數可調用'minSortLoop(std :: array *)'Test.cpp / g測試行23 C / C ++問題

和:

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

錯誤:

說明資源路徑位置類型無效的參數'候選者為:void minSortLoop(?&)'Test.cpp / g測試行23語義錯誤

說明資源路徑位置類型與'operator *'不匹配(操作數類型為'std :: array')Test.cpp / g測試行23 C / C ++問題

不知道如何稱呼它。 參考文獻建議類似我在這里的第一個示例。

@tadman:

我需要通過大小。 這是從任務描述中給出的:-(

@ Jarod42:這是哪個編譯器? 我在Windows 7下的Eclipse中使用Cygwin。

@pasasap:是的,我編譯了它,或者至少嘗試了。 導致描述的錯誤。


編輯2:

正如@pasasap在評論之一中提到的那樣,問題似乎出在日食。 沒有人知道解決方案而不關閉cody-analysis嗎?

應該只是

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

問題是我的IDE Eclipse。 一旦我關閉了代碼分析功能,它就會按預期進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM