2014-02-18 11 views
1

У меня есть:Невозможно назначить структуру?

-структуру
struct Handle 
{ 
public: 
    const unsigned long Id; 
    const std::type_index Index; 
    Handle() : Id(-1), Index(std::type_index(typeid(Event))){} 
    Handle(unsigned long id, std::type_index index) : Id(id), Index(index) {} 
}; 

, но когда я пытаюсь присвоить его переменной я получаю

Ошибка 10 Ошибка C2582: «оператор =» функция недоступна в «EventHandler :: Handle '

Почему? (Я использую structs, потому что, насколько я знаю, они обрабатываются как типы данных и могут быть возвращены из функций без создания с новыми. Это правильно?)

+6

Если ваши члены являются 'const', они не могут быть назначены так, как это было бы сделано. – chris

ответ

12

Оператор присваивания по умолчанию не генерируется для Handle, поскольку он быть плохо сформированным. То, что он делает, просто назначает члену и, очевидно, не допускается к const членам.

Вместо этого не объявляйте их const. Если они не предназначены для модификации вне оператора присваивания, просто поместите их в раздел private и не предоставляйте интерфейс, который разрешил бы модификацию.

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