Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

error C2371: redefinition; different basic types Как решить проблему

2.0K
13 октября 2006 года
rules
29 / / 19.03.2004
Доброе время суток

Среда разработки VC6

есть файл common.h
#define N 173

typedef struct {
unsigned char alfa[N];
} FIELD2N ;

и файл
onb.cpp
#include "stdafx.h"
#include "common.h"
.............
FIELD2N A,B,P0_order;
.....
void main()
....

При компиляции всего этого получаю ошибку
error C2371: 'FIELD2N' : redefinition; different basic types
d:\dp\13102006\model\common.h(13) : see declaration of 'FIELD2N'

Если не использовать common.h а описать тип в onb.cpp все без проблем.

На майкрософте нашел решение (добавить тег)
typedef struct BlaBla {
unsigned char alfa[N];
} FIELD2N ;
тогда error C2011: 'BlaBla' : 'struct' type redefinition

Может кто видел такое, помогите PLZ
309
14 октября 2006 года
el scorpio
1.1K / / 19.09.2006
"#define N 173" - не совсем корректно. Правильнее будет "const int N = 173;"
2.1K
14 октября 2006 года
cozy
69 / / 11.01.2004
добавь в начало файла common.h
#pragma once
2.1K
14 октября 2006 года
cozy
69 / / 11.01.2004
[QUOTE=el scorpio]"#define N 173" - не совсем корректно. Правильнее будет "const int N = 173;"[/QUOTE]
Все корректно. Другое дело, что рекомендуется не использовать #define
309
16 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Цитата:

На майкрософте нашел решение (добавить тег)
typedef struct BlaBla {
unsigned char alfa[N];
} FIELD2N ;
тогда error C2011: 'BlaBla' : 'struct' type redefinition


Вызывает закономерный вопрос "Что курил автор" :D?
Правильно будет

 
Код:
struct Имя_Структуры
{
int a;
double b;
//.... и так далее
};

И никаких typedef. Вообще, случаи, когда оправдано использование этого оператора, можно перечислить по пальцам:
1. Объявление типа "указатель на функцию" typedef (Результат Способ_Вызова *Имя) (Параметры_Функции)
2. Объявление конкретной реализации шаблона: typedef Имя_Шаблона <Тип_Содержимого> Имя_Класса
Всё остальное от лукавого, запутывания окружающих ради :D
240
16 октября 2006 года
aks
2.5K / / 14.07.2006
[QUOTE=el scorpio]Вызывает закономерный вопрос "Что курил автор" :D?
Правильно будет
...
И никаких typedef. Вообще, случаи, когда оправдано использование этого оператора, можно перечислить по пальцам:
[/QUOTE]
Ну просто у автора явный C-Style =)
Видимо он учил изначально С, а не С++ вот и все. А там это вполне оправданно.
309
16 октября 2006 года
el scorpio
1.1K / / 19.09.2006
[QUOTE=aks]Ну просто у автора явный C-Style =)
Видимо он учил изначально С, а не С++ вот и все. А там это вполне оправданно.[/QUOTE]
То константы через #DEFINE, то переопределение существующих типов... Позновато он писать так начал :D .
А C-Style мне не нравится совершенно, хотя бы уже потому, что придерживающиеся этого "стиля" готовы переопределять что угодно: typedef TStruct* pStruct - подобный год всегда вызывал у меня неприязнь. На что ещё готовы пойти люди, чтоб "звёздочку" не ставить :confused:
240
16 октября 2006 года
aks
2.5K / / 14.07.2006
ну C-style имеет право на жизнь хотя бы потому, что автор может именно на C и пишет. Кстати по коду не понятно, на чем он пишет, если бы не расширение файла .cpp (которая студия по неопытности юзера может сама подставить) и #include "stdafx.h" который так же, если не позаботится, вставляется студией. =)
А без typedef в C придется всегда писать
 
Код:
struct SomeStruct{

  ...
};
struct SomeStruct value;


И еще немного оффтопа. Всегда хотел узнать у любителей борланда. Что означает буква T в начале их собственных имен классов и структур? )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог