2014-02-08 170 views
3

我可以直接傳遞我的數組,但我需要知道如何通過引用傳遞它。我正在使用類型爲Element的新std :: array。我嘗試了幾件事,但他們沒有工作。我不確定如何通過它作爲參考。我搞砸了,我無法弄清楚。通過std :: array作爲參考參數

如何傳遞std ::數組作爲參考參數以避免複製整個數組?

我的數組是如何設置:

std::array<Element, 115> Elements = 
{{ 
    /*int aNumber, float awNumber, period_number PERIOD, group_names GROUP_NAME, metal_status METALSTATUS, 
    valence_shell Orbital,std::string eName, std::string eSybol);*/ 
    {}, 
    {1,  1.00794,  period::PERIOD_ONE,  group::HYDROGEN,  metal::NONMETAL, shell::S_ORBITAL, "Hydrogen",  "H"} 
}}; 

工作

void sortByAtomicNumber(std::array<Element, 115> elements, int minimum, int maximum) 
{ 
    int counter = 1; 
    for(;minimum < (maximum+1); minimum++) 
    { 
     std::cout << counter << ".) " << elements[minimum].getElementName() << std::endl; 
     counter++; 
    } 
} 

嘗試來源:http://gauravpandey.com/wordpress/?p=602 //我還沒學會模板尚未...

template<size_t N> 
void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum) { 
    int counter = 1; 
    for(;minimum < (maximum+1); minimum++) 
    { 
     std::cout << counter << ".) " << arr[minimum].getElementName() << std::endl; 
     counter++; 
    } 
} 

錯誤從上面


error: passing 'const value_type {aka const Element}' as 'this' argument of 'std::string > > Element::getElementName()' discards qualifiers [-fpermissive]


+0

不要使參考'const',因爲那樣你將不能修改數組... – Brian

+1

@BrianBi我不需要修改數組;這就是爲什麼我使用數組而不是矢量。 – Crysis

+0

哎呦,我誤讀了,對不起。 – Brian

回答

1

試試這個:

void sortByAtomicNumber(std::array<Element, 115> &elements, int minimum, int maximum) 
{ 
    int counter = 1; 
    for(;minimum < (maximum+1); minimum++) 
    { 
     std::cout << counter << ".) " << elements[minimum].getElementName() << std::endl; 
     counter++; 
    } 
} 
+0

我建議使用typedef爲std :: array user3159253

+0

對不起。我剛剛更新了我的問題;我已經解決了類型問題和命名問題。 但是,當我這樣做,我得到這個錯誤:未定義的引用'sortByAtomicNumber(std :: array ,int,int) – Crysis

+0

你在哪裏調用它?有可能你的.h和.c文件不匹配。既然你沒有發佈太多的代碼,我將很難回答,但沒有更多的信息 – portforwardpodcast

1

你有一些錯誤:

  1. 在日e模板sortByAtomicNumber,std::array<int, N>應該是std::array<Element, N>

  2. 如果你想調用一個const對象的函數,函數必須是const。所以你的arr是const引用,Element類的void getElementName();應該是void getElementName() const;

  3. 如果你想調用一個對象的非const函數,該對象必須是非const的。所以template<size_t N> void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum) { /* your code */ }應該是template<size_t N> void sortByAtomicNumber(std::array<Element, N>& arr, int maximum, int minimum) { /* your code */ },就像@portforwardpodcast說的那樣。

注:關於常量類的常量功能,你可以看到this article。希望能幫助你。

+0

感謝您的鏈接。它解釋了很多。如果我想通過,那麼答案就會很明顯。 – Crysis