No Image

Ссылка на массив структур c

СОДЕРЖАНИЕ
191 просмотров
10 марта 2020

Я учусь о ссылках в C ++. Разве невозможно создать ссылку на массив структур?

Я получаю следующие ошибки:

ссылка типа «студент &«(не квалифицированное по const) не может быть инициализировано значением типа« student [100] »
Ошибка C2440 «инициализация»: невозможно преобразовать из «student [100]» в «student» &’

Решение

Тип ссылки должен соответствовать тому, на что он ссылается. Ссылка на одного студента не может ссылаться на массив из 100 студентов. Ваши варианты включают в себя:

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

Да, это возможно. Это просто должна быть ссылка правильного типа. Студент не массив из 100 студентов. Синтаксис немного неловкий, хотя:

Это будет иметь больше смысла, как только вы прочитаете это: http://c-faq.com/decl/spiral.anderson.html

Наиболее распространенное место, где вы увидите ссылки на массивы, это, вероятно, аргументы шаблонных функций, где определяется размер.

Это позволяет передавать массив в функцию в виде одного аргумента, без потери указателя и потери информации о размере.

Пример этого можно увидеть в стандартной библиотеке с std::begin/end ,

1 zer0c00l [2016-07-04 01:58:00]

Я изучаю ссылки в C++. Невозможно создать ссылку на массив структур?

Я получаю следующие ошибки:

ссылка типа "student &" (не const-qualified) не может быть инициализирована значением типа "student [100]"
Ошибка C2440 ‘initializing’: не может преобразовать из ‘student [100]’ в ‘student &’

c++ arrays struct visual-c++

2 ответа

Да, возможно. Это просто должно быть ссылкой правильного типа. Студент – это не 100 учеников. Синтаксис немного неудобен:

Это будет иметь больше смысла, если вы прочтете это: http://c-faq.com/decl/spiral.anderson.html

Наиболее распространенное место, где вы увидите ссылки на массивы, вероятно, является аргументом в функции шаблона, где размер выводится.

Это позволяет передавать массив в функцию как один аргумент без его разложения на указатель и потери информации о размере.

Читайте также:  Видеоадаптер amd radeon hd 6700 series

Пример этого можно увидеть в стандартной библиотеке с помощью std::begin/end .

4 M.M [2016-07-04 02:01:00]

Тип ссылки должен соответствовать тому, на что он ссылается. Ссылка на одного ученика не может ссылаться на массив из 100 студентов. Ваши варианты включают:

Точно так же, как мы можем создавать массивы любых встроенных типов данных (int, char…), можно создавать массивы структур. Рассмотрим это на примере со структурой WonderfulWoman знакомой нам из первой и второй частей статьи о структурах C++.

Надо внести данные о 7-ми моделях. Данные показать на экран в виде таблицы, чтобы было легче их сравнить. Схематично так:

Чтобы это реализовать – набирайте код:

Массив объектов структуры WonderfulWoman объявлен в строке 29 и в этой же строке все элементы объектов в этом массиве инициализированы нулями. Как видите – кроме того, что вместо встроенного типа мы написали дескриптор структуры, больше ничего нового в этом объявлении для нас нет. Дали имя массиву, указали количество элементов (объектов), инициализировали нулями – всё. Таким образом мы создали массив объектов структуры.

Как обратиться к элементу конкретного объекта структуры? Обычное обращение через точку уже не подойдет:

Конечно, ведь непонятно в какой именно объект из 7 надо внести данные. Так как каждый объект теперь является ячейкой массива структур, чтобы обратиться к его элементам надо сначала указать индекс объекта в квадратных скобках. Только потом точку и имя элемента:

В строках 31- 49 находится цикл for. С его помощью вносятся данные во все объекты массива структур. Обратите внимание на строку 47. Без этого оператора cin.get(); вы столкнетесь с ошибкой, о которой компилятор вам не сообщит. Она заключается в том, что после внесения данных в элемент Woman[i].volume.hips и нажатия Enter , в потоке ввода остаётся символ конца строки. Когда цикл продолжит работу – этот символ автоматически запишется в Woman [ i ] . name следующего объекта и нам сразу будет предложено ввести возраст. То есть имя внести мы не сможем. Чтобы этого избежать, надо считать из потока этот символ с помощью cin.get(); .

Читайте также:  Dev c исходный файл не скомпилирован

Результат – заполняем структуры данными :

После ввода данных всех моделей, экран очистится (за что отвечает system(“cls”); ) и мы увидим таблицу:

В этой статье поговорим ещё об указателях на структуры. Если, например, надо написать функцию, в которой будут записываться данные в элементы структуры, то необходимо передать эту структуру по указателю. Иначе изменения не сохранятся. Рассмотрим пример со структурой Size из предыдущего листинга. Надо написать функцию, в которой пользователь вносит данные в элементы структуры.

Комментировать
191 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector