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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
#1

redefinition; different basic types - C++

28.09.2012, 23:09. Просмотров 1837. Ответов 7
Метки нет (Все метки)

В одном файле "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++):

Error C2371 'int8_t': redefinition; different basic types - C++
Всем доброе утро!:) Такая вот беда - Error C2371 'int8_t': redefinition; different basic types. Гуглила долго и нудно, но как...

redefinition of class - C++
Даже не могу предположить что не так, наверняка ошибка глупая, подскажите подалуйста ASTManage/SvcHandler.h:27:9: error: redefinition...

Ошибка: 'int i': redefinition - C++
#include <iostream> #include <locale> using namespace std; int main(int argc, const char * argv) { setlocale(LC_ALL,...

warning C4005: '_WIN32_WINDOWS' : macro redefinition - C++
есть программа ,при компилирование выдает ошибку такого рода -------------------Configuration: DIPLOM_6 - Win32 Debug--------------------...

Error C2374: 'i' : redefinition; multiple initialization - C++
помогите, пожалуйста, исправить ошибку error C2374: 'i' : redefinition; multiple initialization вот как выглядит задание Определить...

Error X3003: redefinition error - C++
Здравствуйте! Доброго времени суток всем! Помогите пожалуйста решить проблему. Работаю в Visual Studio 2015 Community. Проект собирается...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
28.09.2012, 23:11 #2
pragma once
NoMasters
Псевдослучайный
1753 / 1096 / 72
Регистрация: 13.09.2011
Сообщений: 3,127
28.09.2012, 23:24 #3
Цитата Сообщение от ReasonX7 Посмотреть сообщение
Но некоторые считают его неефективным и вовсе ошибочным.
Не слушай их, это единственно верный метод. А вот #progma не нужна.
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
28.09.2012, 23:25 #4
NoMasters, полностью согласен!
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
29.09.2012, 00:02 #5
Предлагаю универсальный вариант!
C++
1
2
3
4
5
6
7
#pragma once
#ifdef FILENAME_H__
#define FILENAME_H__
 
/* здесь кот */
 
#endif // FILENAME_H__
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
29.09.2012, 00:09 #6
Цитата Сообщение от NoMasters Посмотреть сообщение
Не слушай их, это единственно верный метод. А вот #progma не нужна.
Include guards optimisation
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
29.09.2012, 01:15  [ТС] #7
Насколько я понимая, если использовать:
C++
1
2
3
4
#ifndef file_name
#define file_name
// код
#endif
То проект буде компилироваться долго, так как при изменении хоть одного из файлов, будут заново компилится и остальные. А при использовании
C++
1
#pragma once
перекомпилируется только измененный файл. Я все правильно понял?
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
29.09.2012, 01:47 #8
Нет... если изменить любой хедер (не важно - pragma там или нет), который подключается в сотни других файлов, то все они будут перекомпилироваться. А вместе с ними будут перекомпилироваться те, которых подключают их. И так по цепочке.
Насколько я помню, pragma once - это тот же ifndef. Только с гарантией неповторяемости file_name за счет генерирования уникальных id. Могу ошибаться)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2012, 01:47
Привет! Вот еще темы с ответами:

Ошибка: Too many types is declaration - C++
Ребят нужна помощь. Начал смотреть ООП, пытаюсь писать какие то простые примеры, например: #include <iostream.h> #include <conio.h> ...

Common Data Types - C++
Вопрос элементарный, просто ради интереса :) Я понимаю, что это, в принципе, одно и то же, но все же: Зачем ввели INT32, UINT8, BOOL,...

Ошибка: Multiples types in one declaration - C++
Как исправить ошибку которая ниже на скрине? И заработает ли этот код?( проба создать связной список) #include <iostream> using...

Ошибка в классе - multiple types - C++
Изучаю связанные списки указателей. Написал список по той же структуре, как и в книге. Ошибка выбивается - \Link_List\main.cpp|19|error:...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.09.2012, 01:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru