Форум программистов, компьютерный форум CyberForum.ru

redefinition; different basic types - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
ReasonX7
 Аватар для ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 146
28.09.2012, 23:09     redefinition; different basic types #1
В одном файле "dcst.h" я объявил новые типы переменных:
C++
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct 
{
    float red;
    float green;
    float blue;
} color_t;
 
typedef struct 
{
    int x;
    int y;
} coord_t;
Этот файл я подключаю к двум другим. Компилятор выдает ошибку:
C++
1
redefinition; different basic types
Насколько я понял это из-за того, что я дважды подключаю один и тот же файл, в котором указаны новые типы переменных, то есть они у меня дважды определены. Читал, что эту ошибку можно исправить так:
C++
1
2
3
4
#ifndef file_name
#define file_name
// код
#endif
Но некоторые считают его неефективным и вовсе ошибочным. Есть ли еще способы, как исправить эту ошибку при компиляции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2012, 23:09     redefinition; different basic types
Посмотрите здесь:

C++ Где найти список data types для C и C++?
warning C4005: '_WIN32_WINDOWS' : macro redefinition C++
C++ redefinition of class
Ошибка в классе - multiple types C++
C++ Ошибка: Multiples types in one declaration
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
28.09.2012, 23:11     redefinition; different basic types #2
pragma once
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,094
28.09.2012, 23:24     redefinition; different basic types #3
Цитата Сообщение от ReasonX7 Посмотреть сообщение
Но некоторые считают его неефективным и вовсе ошибочным.
Не слушай их, это единственно верный метод. А вот #progma не нужна.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
28.09.2012, 23:25     redefinition; different basic types #4
NoMasters, полностью согласен!
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
29.09.2012, 00:02     redefinition; different basic types #5
Предлагаю универсальный вариант!
C++
1
2
3
4
5
6
7
#pragma once
#ifdef FILENAME_H__
#define FILENAME_H__
 
/* здесь кот */
 
#endif // FILENAME_H__
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
29.09.2012, 00:09     redefinition; different basic types #6
Цитата Сообщение от NoMasters Посмотреть сообщение
Не слушай их, это единственно верный метод. А вот #progma не нужна.
Include guards optimisation
ReasonX7
 Аватар для ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 146
29.09.2012, 01:15  [ТС]     redefinition; different basic types #7
Насколько я понимая, если использовать:
C++
1
2
3
4
#ifndef file_name
#define file_name
// код
#endif
То проект буде компилироваться долго, так как при изменении хоть одного из файлов, будут заново компилится и остальные. А при использовании
C++
1
#pragma once
перекомпилируется только измененный файл. Я все правильно понял?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2012, 01:47     redefinition; different basic types
Еще ссылки по теме:

C++ Error C2374: 'i' : redefinition; multiple initialization
C++ Ошибка: Too many types is declaration
C++ Common Data Types

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
29.09.2012, 01:47     redefinition; different basic types #8
Нет... если изменить любой хедер (не важно - pragma там или нет), который подключается в сотни других файлов, то все они будут перекомпилироваться. А вместе с ними будут перекомпилироваться те, которых подключают их. И так по цепочке.
Насколько я помню, pragma once - это тот же ifndef. Только с гарантией неповторяемости file_name за счет генерирования уникальных id. Могу ошибаться)
Yandex
Объявления
29.09.2012, 01:47     redefinition; different basic types
Ответ Создать тему
Опции темы

Текущее время: 14:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru