VC6 - странное поведение
От: Аноним  
Дата: 15.01.10 14:16
Оценка:
Приветствую!

Переношу кусками код, реализующий 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
Re: VC6 - странное поведение
От: Sni4ok  
Дата: 15.01.10 14:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Хотя в проекте структура объявлена один раз


может она обьявлена в файле который включается в одну еденицу компиляции более одного раза?
а вообще 6ка она она настолько далека от плюсового стандарта, что там может быть что угодно.
Re: VC6 - странное поведение
От: Dzirt2005  
Дата: 15.01.10 14:35
Оценка:
Здравствуйте, Аноним, Вы писали:

[...]
А>Оч. хочется узнать почему ) На всякий случай проект — 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-файле не располагал...
Re: VC6 - странное поведение
От: LaptevVV Россия  
Дата: 16.01.10 05:12
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Приветствую!


А>Переношу кусками код, реализующий 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'

А>Хотя в проекте структура объявлена один раз
Скорее всего включаемый файл включается не один раз.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: VC6 - странное поведение
От: rg45 СССР  
Дата: 16.01.10 13:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Приветствую!


А>Переношу кусками код, реализующий 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
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: VC6 - странное поведение
От: nen777w  
Дата: 17.01.10 10:06
Оценка:
R>Проблема в том, что твои заголовочные файлы не имеют защиты от повторного включения. Для защиты от повторного включения достаточно в самом начале каждого заголовочного файла поместить директиву:
R>
R>#pragma once
R>


Ага. Как раз тот случай для VC6. Старый проверенный guard

#ifndef __blablabla_h__
#define __blablabla_h__
 //bla bla bla
#endif
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.