TC 3.1 i ort! error

0

zacząłem pisac gierke w TC 3.1 i ustawiłem pliki tak:
plik: main.c

#include "graph.h"
int main(void) 
{
   enter_graph_mode();
   restore_graph_mode();
   return 0;
}

plik: graph.h

#ifndef _GRAPH_H
#define _GRAPH_H
int enter_graph_mode(void); /*----prototypy----*/
void restore_graph_mode(void);
#endif

pilk: graph.c

#include "graph.h"
int enter_graph_mode(void) {/*----kod----*/}
void restore_graph_mode(void){/*----kod----*/}

No i jak <ort>próbuje </ort>skompilować main.c to wyrzuca mi:
Linkier Error: undefined symbol _enter_graph_mode in module main.c
Linkier Error: undefined symbol _restore_graph_mode in module main.c

// linker a nie linkier - ŁF

0

Wywal graph.h i zmien nazwe graph.c na graph.h

// do postu poniżej:

Takie myślenie ma sens, kiedy robisz projekt, do pojektu wrzucasz pliki, ktore maja być skompilowane i używasz make, ale nie przy pojedynczym pliku głównym. Bo niby skąd kompilator ma wiedzieć, że ciała funkcji sa w graph.c? Przecież dołączasz plik.h, w ktorym są tylko nagłówki. Poza tym nie ma to nic wspólnego z hermetyzacją.

Możesz ewentualnie wpisać zamiast

#include "plik.h"
#include "plik.c", wyjdzie na to samo, o czym pisałem wyżej, o ile tc to skompiluje

Aha, no i wywal z graph.c tego includa... po co ci tam on ? Masz taki balagan w hierarchii, ze potrzebujesz forwardów ?

0

Czy to naprawdę konieczne ?? Wtedy cała hermetyzacja danych staticami w las idzie :\ W standardzie C jest określone jak ma wyglądać dołączanie bibliotek, czyżby borland się nie stosował do tego ??

0

czym jest make i jak moge się fo tego dobrać ??
co do hermetyzacji to ma wspólnego gdyż jak napiszę w pliku *.C static int a, a potem dołącze plik h to zmienna a nie będzie widoczna w main. jak dotąd programowałem w Dev-C++ i wszystko było ok przy takim dołączaniu plików.

1 użytkowników online, w tym zalogowanych: 0, gości: 1