struct Имя_Структуры
{
int a;
double b;
//.... и так далее
};
error C2371: redefinition; different basic types Как решить проблему
Среда разработки 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
"#define N 173" - не совсем корректно. Правильнее будет "const int N = 173;"
#pragma once
Все корректно. Другое дело, что рекомендуется не использовать #define
Цитата:
На майкрософте нашел решение (добавить тег)
typedef struct BlaBla {
unsigned char alfa[N];
} FIELD2N ;
тогда error C2011: 'BlaBla' : 'struct' type redefinition
Вызывает закономерный вопрос "Что курил автор" :D?
Правильно будет
Код:
И никаких typedef. Вообще, случаи, когда оправдано использование этого оператора, можно перечислить по пальцам:
1. Объявление типа "указатель на функцию" typedef (Результат Способ_Вызова *Имя) (Параметры_Функции)
2. Объявление конкретной реализации шаблона: typedef Имя_Шаблона <Тип_Содержимого> Имя_Класса
Всё остальное от лукавого, запутывания окружающих ради :D
Правильно будет
...
И никаких typedef. Вообще, случаи, когда оправдано использование этого оператора, можно перечислить по пальцам:
[/QUOTE]
Ну просто у автора явный C-Style =)
Видимо он учил изначально С, а не С++ вот и все. А там это вполне оправданно.
Видимо он учил изначально С, а не С++ вот и все. А там это вполне оправданно.[/QUOTE]
То константы через #DEFINE, то переопределение существующих типов... Позновато он писать так начал :D .
А C-Style мне не нравится совершенно, хотя бы уже потому, что придерживающиеся этого "стиля" готовы переопределять что угодно: typedef TStruct* pStruct - подобный год всегда вызывал у меня неприязнь. На что ещё готовы пойти люди, чтоб "звёздочку" не ставить :confused:
А без typedef в C придется всегда писать
Код:
struct SomeStruct{
...
};
struct SomeStruct value;
...
};
struct SomeStruct value;
И еще немного оффтопа. Всегда хотел узнать у любителей борланда. Что означает буква T в начале их собственных имен классов и структур? )