我可以直接传递我的数组,但我需要知道如何通过引用传递它。我正在使用带有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]
答案 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)
您有一些错误:
在模板sortByAtomicNumber
中,std::array<int, N>
应为std::array<Element, N>
。
如果你想调用一个const对象的函数,那么该函数必须是const。所以你的arr
是const引用,void getElementName();
是{ {1}}类应为Element
。
如果你想调用一个对象的非const函数,那么该对象必须是非const的。所以void getElementName() const;
应该是template<size_t N> void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum) { /* your code */ }
,就像@ portforwardpodcast说。
注意:关于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)
{
...
}