Передайте std :: array в качестве ссылочного параметра

Я могу передать свой массив напрямую, но мне нужно знать, как передать его по ссылке. Я использую новый std :: array с типом Element. Я пробовал несколько вещей, но они не работают. Я не уверен, как передать его в качестве ссылки. Я бездельничал и не могу понять это.

Как передать 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}’ в качестве аргумента ‘this’ в ‘std :: string>> Element :: getElementName ()’ отменяет квалификаторы [-fpermissive]


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

Другие решения

У вас есть несколько ошибок:

  1. В шаблоне sortByAtomicNumber, std::array<int, N> должно быть std::array<Element, N>,

  2. Если вы хотите вызвать функцию объекта const, функция должна быть const. Так что ваши arr является постоянной ссылкой, 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 вы можете увидеть Эта статья. Надеюсь, что это может помочь вам.

1

По вопросам рекламы [email protected]