gpt4 book ai didi

c++ - 将 std::array 作为引用参数传递

转载 作者:太空狗 更新时间:2023-10-29 21:21:56 24 4
gpt4 key购买 nike

我可以直接传递我的数组,但我需要知道如何通过引用传递它。我使用的是 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++;
}
}

来自上方的错误


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


最佳答案

你有一些错误:

  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函数,可以看this article .希望对您有所帮助。

关于c++ - 将 std::array 作为引用参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com