Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > [Си] Распознаватель символьной цепочки


Автор: memory 27.12.2007, 23:34
При написании распознавателя возникла следующая проблема: по отдельности файлы проекта компилятся, но при попытке подключить их к головному модулю возникают ошибки user posted image

код следующий: 
Код

/*transliterator.h
 блок транслитерации, выполняет обработку и распознавание входной символьной цепочки*/
#include <stdio.h>
#define maxn 100

typedef char translitlexval_t;
/*класс лексемы транслитератора*/
typedef enum {trlc_letter, trlc_digit, trlc_equal, trlc_space, trlc_comma, 
               trlc_sign, trlc_$ch, trlc_error} translitlexclass_t;
/*лексема транслитератора*/
typedef struct {translitlexval_t val; 
                translitlexclass_t lexclass;
               } translitlexeme_t;
/*цепочка лексем транслитератора*/
typedef translitlexeme_t translitlexarr_t[maxn];


/*транслитератор, возвращает кол-во лексем в цепочке, 0 - недопустимая цепочка*/
int translinerat(char* string, translitlexarr_t lex);



Подскажите, пожалуйста, с чем связаны ошибки, м как их устранить.

Автор: maxim1000 28.12.2007, 11:32
воможно, в каком-то модуле происходит подключение этого хедера несколько раз, соответственно, и переопределение получается

для этого используют такие конструкции:
Код

#ifndef TRANSLITERATOR_H_
#define TRANSLITERATOR_H_

...//тут содержимое

#endif


таким образом, при первом включении TRANSLITERATOR_H_ определён не будет, а значит, всё, что между #ifndef и #endif будет обработано, в том числе и #define

а уже при всех последующих включениях #ifndef не пропустит, т.к. TRANSLITERATOR_H_ уже определён

Автор: zkv 28.12.2007, 11:58
и небольшое замечание:
Цитата(memory @  27.12.2007,  23:34 Найти цитируемый пост)
#include <stdio.h>

это лишнее, судя по твоему коду, если stdio.h нужен тебе в реализации (в .c-файле), то и подключай его там.

Автор: archimed7592 28.12.2007, 12:53
И ещё одно небольшое замечание: в будущем рекомендую воздержаться от выкладывания скриншотов. Ошибки из студии очень просто копировать используя контекстное меню или комбинацию клавиш CTRL + C.

Автор: zkv 28.12.2007, 13:01
Цитата(maxim1000 @  28.12.2007,  11:32 Найти цитируемый пост)
воможно, в каком-то модуле происходит подключение этого хедера несколько раз, соответственно, и переопределение получается

кстати тема для FAQ

Автор: JackYF 28.12.2007, 14:49
 smile 
Цитата(zkv @  28.12.2007,  13:01 Найти цитируемый пост)
кстати тема для FAQ 

у меня дежавю, или в одном из C++ FAQ'ов я уже эту тему видел?

Кстати, если меня проглючило, то могу заняться подготовкой этой статьи, т.к. завтра уже буду более-менее свободен.

Автор: archimed7592 28.12.2007, 15:16

M
archimed7592
Предлагаю дальнейшее обсуждение производить в соответствующей теме. Тем более, что в шапку я уже добавил этот вопрос.

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