Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Оператор присваивания в заголовочном файле


Автор: 0x07L 2.7.2006, 23:10
Есть заголовочный файл. В заголовочном файле есть структура KeyStruct. Вот такая:
Код

struct KeyStruct
{
    unsigned char VirtualCode;
    BOOL Extended;

    KeyStruct()
    {
    }

    KeyStruct(const KeyStruct & copy)
    : VirtualCode(copy.VirtualCode), Extended(copy.Extended)
    {
    }

    KeyStruct(int virtualCode, BOOL extended)
    : VirtualCode(virtualCode), Extended(extended)
    {
    }

    KeyStruct & operator= (const KeyStruct & copy)
    : VirtualCode(copy.VirtualCode), Extended(copy.Extended)
    {
        //this->VirtualCode = copy.VirtualCode;
        //this->Extended = copy.Extended;
        return *this;
    }
};


Проблема в том, что на этапе компиляции я получаю следующую ошибку:
Код

error C2327: 'KeyStruct::VirtualCode' : is not a type name, static, or enumerator


Что в моем коде не так, я никак не пойму. Может, голова в позднее время плохо соображает, а может, тут действительно что-то не так. В общем, помогите пожалуйста.

Кстати, если раскомментировать (есть такое слово в русском языке?) строчку [this->VirtualCode = ...]
и убрать [VirtualCode(copy.VirtualCode), ], то появляется та же ошибка, только применительно к Extended.

А если список инициализации вообще убрать и снять все комментарии, все OK. 

Автор: Xenon 2.7.2006, 23:18
Я не понял, а почему у структруы методы? Это же уже, даже логически - класс. 

Автор: maxim1000 3.7.2006, 01:32
Цитата(0x07L @  2.7.2006,  22:10 Найти цитируемый пост)
    KeyStruct & operator= (const KeyStruct & copy)
    : VirtualCode(copy.VirtualCode), Extended(copy.Extended)

operator= - метод
а списк инициализации (после двоеточия) используются только в конструкторах
нужно в самом теле делать присваивание 

Автор: Earnest 3.7.2006, 07:40
Цитата(0x07L @  3.7.2006,  00:10 Найти цитируемый пост)
А если список инициализации вообще убрать и снять все комментарии, все OK. 

Именно так и надо делать.
 

Автор: 0x07L 3.7.2006, 08:07
Я так и знал. Точно, голова плохо соображала. В следующий раз буду оставлять такие проблемы на утро.

А структурами я называю все классы с открытыми членами. Конструкторы и злосчастный оператор присваивания здесь служат только для упрощения доступа к данным. Поэтому для меня это ближе к структуре, чем к классу. Может быть, в современном мире так делать не принято? 

Автор: zss 3.7.2006, 14:50
Цитата(XenonSk @  2.7.2006,  23:18 Найти цитируемый пост)
Я не понял, а почему у структруы методы? Это же уже, даже логически - класс.  


Цитата(0x07L @  3.7.2006,  08:07 Найти цитируемый пост)
Поэтому для меня это ближе к структуре, чем к классу. Может быть, в современном мире так делать не принято?  


разница между структурой и классом только в области видимости - больше ничем 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)