2016-07-03 2 views
1

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

struct student { 
    char name[20]; 
    char address[50]; 
    char id_no[10]; 
}; 

int main() { 
    student test; 
    student addressbook[100]; 
    student &test = addressbook; //This does not work 
} 

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

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

+2

Тип адресной книги не «ученик», это «ученик [100]». И вы не хотите учиться создавать ссылки на массив. Просто используйте указатель/итератор. – KABoissonneault

ответ

4

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

// Refer to single student 
student &test = addressbook[0]; 

// Refer to all students 
student (&all)[100] = addressbook; 
auto &all = addressbook;    // equivalent 
4

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

student (&test)[100] = addressbook; 

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

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

template<typename T, size_t N> 
void foo(T (&arr)[N]); 

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

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

Смежные вопросы