Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Откуда двойное определение 
V
    Опции темы
Ostap
Дата 10.2.2006, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.10.2005

Репутация: нет
Всего: нет



Не могу разобраться, откуда возникает ошибка.

main.c:
Код

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "pinit.h"
/*---------------------------------------------------------*/

/*---------------------------------------------------------*/
int main(int argc, char *argv[])
{
    <skip>
    return 1;
}

pinit.h:
Код

            #ifndef PINIT_H_
    #define PINIT_H_

/*---------------------------------------------------------*/
unsigned  const max_time = 1000;
unsigned  const delta = 25;
/*---------------------------------------------------------*/
typedef struct complex
{
    double real;
    double imaginary;
} complex;
/*---------------------------------------------------------*/
int initialization(double *time, double *drive, complex *condition);
/*---------------------------------------------------------*/
    #endif /*PINIT_H_*/

init.c:
Код

#include "pinit.h"

int initialization(double *time, double *drive, complex *condition)
{ 
            <skip>tatus
    return 1;
}


Далее:
#gcc -o sle ../main.c ../init.c
/tmp/cc4ZY5WI.o(.rodata+0x0): multiple definition of `max_time'
/tmp/cc0SqoSZ.o(.rodata+0x0): first defined here
/tmp/cc4ZY5WI.o(.rodata+0x4): multiple definition of `delta'
/tmp/cc0SqoSZ.o(.rodata+0x4): first defined here
collect2: ld returned 1 exit status
----------------------
Почему компилятор выдает ошибку о повторном определении?
PM MAIL   Вверх
volvo877
Дата 10.2.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 1
Всего: 116



Цитата(Ostap @ 9.2.2006, 23:35 Найти цитируемый пост)
Почему компилятор выдает ошибку о повторном определении?

Компилятор или линкер? smile

Компилятор ничего не выдает, с его точки зрения все прекрасно, в каждом файле и max_time и delta встречаются ровно один раз... А вот при линковке...
PM MAIL   Вверх
bel_nikita
Дата 10.2.2006, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Ostap
Это
Код
unsigned  const max_time = 1000;
unsigned  const delta = 25;
выносишь в init.c

А в pinit.h:
Код
extern unsigned  const max_time;
extern unsigned  const delta;



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Ostap
Дата 10.2.2006, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.10.2005

Репутация: нет
Всего: нет



Да, наверное, я ошибся в формулировке.
Так как правильно сделать?
PM MAIL   Вверх
Ostap
Дата 10.2.2006, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.10.2005

Репутация: нет
Всего: нет



bel_nikita, спасибо. Но теперь появилась другая ошибка:
на строку с
int initialization(double *time, double *drive, complex *condition);
он говорит:
syntax error before "complex"

--
Ничего не менялось. Разглядеть синтаксическую ошибку не представляется возможным smile
PM MAIL   Вверх
bel_nikita
Дата 10.2.2006, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



typedef должен быть определен в pinit.h

pinit.h:
Код
...
extern unsigned  const max_time;
extern unsigned  const delta;

typedef struct complex
{
    double real;
    double imaginary;
} complex;
...



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Ostap
Дата 10.2.2006, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.10.2005

Репутация: нет
Всего: нет



Извиняюсь. Все от невнимательности. Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.