3

我可以直接传递我的数组,但我需要知道如何通过引用传递它。我正在使用元素类型的新 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 > > Element::getElementName()' 的 'this' 参数丢弃限定符 [-fpermissive]


4

3 回答 3

2

尝试这个:

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++;
    }
}
于 2014-02-08T05:27:09.470 回答
2

你有一些错误:

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

  2. 如果要调用 const 对象的函数,则该函数必须是 const。所以你arr是 const 引用,void getElementName();类的Element应该是void getElementName() const;.

  3. 如果要调用对象的非常量函数,则对象必须是非常量的。所以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 说的那样。

注:关于 const 类的 const 函数,可以看这篇文章。希望能帮到你。

于 2014-02-08T06:49:20.863 回答
-2

您的函数定义看起来错误, 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)
{
    ...
}
于 2021-07-02T00:50:27.170 回答