2016-01-13 2 views
-1

У меня есть эти строки:Компилятор C2758 Ошибка в Visual Studio 2013

class ModulePeople : public Module { 
public: 
    std::list<People> & list_people; 
    std::list<People>::iterator it; 
} 

Когда я пытаюсь скомпилировать у меня есть эта ошибка:

Compiler Error C2758 
'ModulePeople': a member of reference type must be initialized 

Эта ошибка появляется в этой строке, например:

it = list_people.begin(); 

Но я действительно не знаю, как ввести в действие эту переменную, поскольку я не могу сделать это до NULL. Если кто-то может мне помочь, он был бы очень благодарен.

+1

Пожалуйста, сообщите код, который воспроизводит вашу ошибку. – EdChum

+0

Эта ошибка появляется в этой строке, например: it = list_people.begin(); – Seifil

+0

Мои пристрастия, я скопировал плохо. Отредактировано – Seifil

ответ

0

Ссылка является псевдонимом для существующего объекта с местом для хранения где-то. Это означает, что ссылка должна ссылаться (не каламбур) на существующий объект, это не похоже на указатель, который может иметь значение nullptr.

Это означает, что если вы используете ссылки в качестве поля члена определения класса, то вы должны инициализировать его через любой доступный конструктор такого объекта, например:

class ModulePeople : public Module { 
public: 
    std::list<People> & list_people; 
    std::list<People>::iterator it; 

    ModulePeople(decltype(list_people) list_people) : list_people(list_people) { } 
} 

Если вы действительно хотите, чтобы иметь возможность пусть это указывает на то, что тогда можно было бы использовать указатель, например std::list<People>*.

+0

Спасибо за объяснение! : D – Seifil

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