将std :: array作为参考参数传递

时间:2014-02-08 05:24:23

标签: c++ arrays c++11 stdarray

我可以直接传递我的数组,但我需要知道如何通过引用传递它。我正在使用带有Element类型的新std :: array。我尝试了几件事,但他们没有工作。我不知道如何将它作为参考传递。我搞砸了,我无法弄清楚这一点。

如何将std :: array作为参考参数传递以避免复制整个数组?

我的阵列设置方式:

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++;
    }
}

上方错误


  

错误:将'const value_type {aka const Element}'作为'std :: string&gt;的'this'参数传递&GT; Element :: getElementName()'丢弃限定符[-fpermissive]


3 个答案:

答案 0 :(得分: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++;
    }
}

答案 1 :(得分:1)

您有一些错误:

  1. 在模板sortByAtomicNumber中,std::array<int, N>应为std::array<Element, N>

  2. 如果你想调用一个const对象的函数,那么该函数必须是const。所以你的arr是const引用,void getElementName();是{ {1}}类应为Element

  3. 如果你想调用一个对象的非const函数,那么该对象必须是非const的。所以void getElementName() const;应该是template<size_t N> void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum) { /* your code */ },就像@ portforwardpodcast说。

  4. 注意:关于const类的const函数,您可以看到this article。希望能帮到你。

答案 2 :(得分:0)

您的函数定义看起来有误,const 位置错误: 你给出了这个定义:

template<size_t N>
void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum)
{
    ...
}

应该是:

template<size_t N>
void sortByAtomicNumber(const std::array<int, N>& arr, int maximum, int minimum)
{
    ...
}