Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Откуда двойное определение


Автор: Ostap 10.2.2006, 00:35
Не могу разобраться, откуда возникает ошибка.

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
----------------------
Почему компилятор выдает ошибку о повторном определении?

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

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

Компилятор ничего не выдает, с его точки зрения все прекрасно, в каждом файле и max_time и delta встречаются ровно один раз... А вот при линковке...

Автор: bel_nikita 10.2.2006, 01:09
Ostap
Это
Код
unsigned  const max_time = 1000;
unsigned  const delta = 25;
выносишь в init.c

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

Автор: Ostap 10.2.2006, 01:14
Да, наверное, я ошибся в формулировке.
Так как правильно сделать?

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

--
Ничего не менялось. Разглядеть синтаксическую ошибку не представляется возможным smile

Автор: bel_nikita 10.2.2006, 01:58
typedef должен быть определен в pinit.h

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

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

Автор: Ostap 10.2.2006, 02:05
Извиняюсь. Все от невнимательности. Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)