Eli jos map.cc tiedostossa on karttaa koskeava luokka niin miten voin käyttää sitä main.cc vaikka ne laitetaan yhteen makella.
Minun makefile:
rope:map.o object.o main.o g++ -o rope map.o object.o main.o
PS:Yllätys, yläätys, make toimii nuinkin :O ei tarvi erikseen määritellä miten nuo o tiedostot käännetään.
Tuota varten jokaiselle kooditiedostolle on yleensä otsikkotiedosto:
/********** ** map.h ** **********/ class TKartta { public: TKartta(); ~TKartta(); };
/*********** ** map.cc ** ***********/ #include "map.h" // Funktiot: TKartta::TKartta() { } TKartta::~TKartta() { }
/************ ** main.cc ** ************/ #include "map.h"
Itse olen yleensä käyttänyt tälläistä Makefilea.
CC = g++ LD = g++ #C++-compiler options CFLAGS = -Wall -g -O2 # libraries LDLIBS = -lm # Object files for target OBJS = main.o map.o object.o # target program TARGET = rope all: $(TARGET) clean: rm -f $(OBJS) *~ core.* $(TARGET) %.o: %.cc $(CC) $(CFLAGS) -c -o $@ $< $(TARGET): $(OBJS) $(LD) -o $@ $(OBJS) $(LDLIBS) .PHONY: all clean
Oli pakko tuoda esiin, koska tämä ei toimi vieläkään. Muutin .h tiedostoksi ja sinne sisälle luokan esittelyn + joitain headereita ja vakioita, koska muuten niitä ei voi käyttää.
EDIT: ainiin. Unohtui mainita mitä se valittaa:
g++ -c -o main.o main.cc g++ main.o -o rope main.o(.text+0x126): In function `main': : undefined reference to `map::map()' main.o(.text+0x167): In function `main': : undefined reference to `Door::Door()' collect2: ld returned 1 exit status make: *** [rope] Error 1
ja vielä makefile:
rope:main.o g++ main.o -o rope
Mulla unohtui laittaa .cc tiedostoon .h tiedoston liittäminen(include)
EDIT2: Nytten ei tarvi olla .h tiedostoissa kuin luokka.
Aihe on jo aika vanha, joten et voi enää vastata siihen.