# # file = Makefile # CC = g++ CDFLAGS = -c LDFLAGS = DEBUGFLAGS = -g CFLAGS += $(DEBUGFLAGS) CDFLAGS += $(DEBUGFLAGS) OBJS = start.o class.o main.o TARGET = mystart default: $(TARGET) clean: rm -f *.o a.out $(TARGET) $(TARGET): main.o $(OBJS) $(CC) -o $(TARGET) main.o $(OBJS) $(LDFLAGS) start.o: class.h class.cpp start.h $(CC) $(CDFLAGS) start.cpp class.o: class.h $(CC) $(CDFLAGS) class.cpp main.o: main.cpp class.cpp start.cpp $(CC) $(CDFLAGS) main.cpp // // file = class.cpp // #include "class.h" myclass::myclass() { this->sum=0; } // // file = class.h // #ifndef MYCLASS #define MYCLASS class myclass { public: int sum; myclass(); template void add(T o); }; template void myclass::add(T o) { sum++; }; #endif // // file = main.cpp // #include "start.h" #include "class.h" int main() { myclass *c=myclass_start(); long a; int b; c->add(a); c->add(b); } // // file = start.cpp // #include "class.h" myclass *myclass_start() { myclass *t=new myclass(); int a; t->add(a); return t; } // // file = start.h // #ifndef MYSTART #define MYSTART #include "class.h" myclass *myclass_start(); #endif //// RESULTS g++ -c -g main.cpp g++ -c -g start.cpp g++ -c -g class.cpp g++ -o mystart main.o start.o class.o main.o main.o: In function `void myclass::add(int)': /home/gamemon/src3/main.cpp:7: multiple definition of `main' main.o:/home/gamemon/src3/main.cpp:7: first defined here collect2: ld returned 1 exit status make: *** [mystart] Error 1