Приветствую!
Переношу кусками код, реализующий DES в свой проект, на определённом этапе
компилятор стал ругаться
c:\temp\get_resp\des.h(4) : error C2011: 'des_ks_struct' : 'struct' type redefinition
c:\temp\get_resp\des.h(4) : see declaration of 'des_ks_struct'
Хотя в проекте структура объявлена один раз
Оч. хочется узнать почему ) На всякий случай проект —
http://files.mail.ru/L5C51F
Здравствуйте, Аноним, Вы писали:
А>Хотя в проекте структура объявлена один раз
может она обьявлена в файле который включается в одну еденицу компиляции более одного раза?
а вообще 6ка она она настолько далека от плюсового стандарта, что там может быть что угодно.
Здравствуйте, Аноним, Вы писали:
[...]
А>Оч. хочется узнать почему ) На всякий случай проект — http://files.mail.ru/L5C51F
А если вместо
typedef struct des_ks_struct {
des_cblock _;
} des_key_schedule[16];
написать
typedef struct {
des_cblock _;
} des_ks_struct;
des_ks_struct des_key_schedule[16];
не поможет? Хотя я бы массив des_key_schedule вообще бы в .h-файле не располагал...
Здравствуйте, Аноним, Вы писали:
А>Приветствую!
А>Переношу кусками код, реализующий DES в свой проект, на определённом этапе
А>компилятор стал ругаться
А>А>c:\temp\get_resp\des.h(4) : error C2011: 'des_ks_struct' : 'struct' type redefinition
А>c:\temp\get_resp\des.h(4) : see declaration of 'des_ks_struct'
А>Хотя в проекте структура объявлена один раз
Скорее всего включаемый файл включается не один раз.
Здравствуйте, Аноним, Вы писали:
А>Приветствую!
А>Переношу кусками код, реализующий DES в свой проект, на определённом этапе
А>компилятор стал ругаться
А>А>c:\temp\get_resp\des.h(4) : error C2011: 'des_ks_struct' : 'struct' type redefinition
А>c:\temp\get_resp\des.h(4) : see declaration of 'des_ks_struct'
А>Хотя в проекте структура объявлена один раз
А>Оч. хочется узнать почему ) На всякий случай проект — http://files.mail.ru/L5C51F
Потому, что файл
des.h, в котором определена структура
des_ks_struct, оказывается включенным в компилируемый файл
ntlm_resp.cpp дважды. Один раз по цепочке:
ntlm_resp.cpp->ecb_encrypt.h->des_local.h->des.h
второй раз по цепочке:
ntlm_resp.cpp->ecb_encrypt.h->set_key.h->des_local.h->des.h
Проблема в том, что твои заголовочные файлы не имеют защиты от повторного включения. Для защиты от повторного включения достаточно в самом начале
каждого заголовочного файла поместить директиву:
#pragma once
R>Проблема в том, что твои заголовочные файлы не имеют защиты от повторного включения. Для защиты от повторного включения достаточно в самом начале каждого заголовочного файла поместить директиву:
R>R>#pragma once
R>
Ага. Как раз тот случай для VC6. Старый проверенный guard
#ifndef __blablabla_h__
#define __blablabla_h__
//bla bla bla
#endif