Welcome Guest ( Log In | Register )

Help | Search | Members | Calendar

 
Problem compling multiple files with g++, Ooh, SHIT!
« Next Oldest | Next Newest » Track this topic | Email this topic | Print this topic
Master of Puppets
Posted: Jul 3 2007, 21:50

Eye of the Vision

Group: Moderator
Member No.: 2067

Joined: August 29, 2006

Имеются три файла:
CClass.h (содержит объявлене шаблонного класса)
CClass.cpp (содержит реализацию методов шаблонного класса)
Program.cpp (програма создает объект типа CClass<int>)

Makefile выглядит следующим образом:

CODE

test: CClass.o Program.o
g++ -o test CClass.o Program.o
Program.o: Program.cpp CClass.h
g++ -c Program.cpp
CClass.o: CClass.cpp CClass.h
g++ -c CClass.cpp


При попытке запустить make линкер ругается, что, мол undefiled reference to CClass<int>::CClass[in-charge]()...
В общем, что-то в этом роде, то есть, ведет себя так, будто бы релизаций методов класса CClass нет и в помине.
Что делать? sad.gif

--------------------
Master of Puppets, I'm pulling your strings, twisting your mind and smashing your dreams!
⠠⠵
 
       Top
Dream_InspectoR
Posted: Jul 3 2007, 21:53

Eye of the Vision

Group: Moderator
Member No.: 614

Joined: February 10, 2004

Почитать книгу "Exceptional C++", "More Exceptional C++" Герба Саттера ("Решение сложных задач на С++" и "Новые сложные задачи на С++" в русском варианте) понять что такое шаблоны и почему нельзя обьявить шаблон в заголовочном файле и реализовать его в другом, да так, чтоб он скомпилился и потом компоновался.

http://anatolix.naumen.ru/Books/ExceptionalCPP?v=rli вперед!


P.S. Если покороче то шаблоны должны быть в заголовочных файлах и компилиться каждый раз вместе с программой.

--------------------
Kill'em!!! Kill'em ALL!!!
 
        Top
Master of Puppets
Posted: Jul 3 2007, 21:55

Eye of the Vision

Group: Moderator
Member No.: 2067

Joined: August 29, 2006

О, спасибо боьшое! Ты как всегда помог! smile.gif

--------------------
Master of Puppets, I'm pulling your strings, twisting your mind and smashing your dreams!
⠠⠵
 
       Top
Dream_InspectoR
Posted: Jul 3 2007, 21:57

Eye of the Vision

Group: Moderator
Member No.: 614

Joined: February 10, 2004

Я там приписал P.S smile.gif

--------------------
Kill'em!!! Kill'em ALL!!!
 
        Top
Master of Puppets
Posted: Jul 3 2007, 21:58

Eye of the Vision

Group: Moderator
Member No.: 2067

Joined: August 29, 2006

Обязательно буду иметь в виду. А в той книге говорится о friend-функциях в шаблонных классах?

--------------------
Master of Puppets, I'm pulling your strings, twisting your mind and smashing your dreams!
⠠⠵
 
       Top
Dream_InspectoR
Posted: Jul 3 2007, 22:45

Eye of the Vision

Group: Moderator
Member No.: 614

Joined: February 10, 2004

Не помню...

--------------------
Kill'em!!! Kill'em ALL!!!
 
        Top
Master of Puppets
Posted: Jul 4 2007, 17:11

Eye of the Vision

Group: Moderator
Member No.: 2067

Joined: August 29, 2006

А теперь такой вопрос:

something.h:
CODE

#ifndef SOMETHING
#define SOMETHING
int globalVar;
void Foo();
#endif


something.cpp:
CODE

#include "something.h"
void Foo(){
//...
}


test.cpp:
CODE

#include "something.h"
int main(){
Foo();
return 0;
}


Пытаюсь компильнуть:
CODE

g++ something.cpp test.cpp

Компилятор обвиняет меня в попытке объявить переменную globalvar дважды sad.gif

--------------------
Master of Puppets, I'm pulling your strings, twisting your mind and smashing your dreams!
⠠⠵
 
       Top
Dream_InspectoR
Posted: Jul 4 2007, 17:30

Eye of the Vision

Group: Moderator
Member No.: 614

Joined: February 10, 2004

Раз уж приспичило обьявить глобальную переменную обьявляешь ее в одном cpp файле, а в хедере пишешь extern int globalVar;.

Кстати в "Новых сложных задачах" есть про друзей шаблонов..

--------------------
Kill'em!!! Kill'em ALL!!!
 
        Top
7 replies since Jul 3 2007, 21:50 Track this topic | Email this topic | Print this topic

<< Back to Unix programming

 




Arminco Global Telecommunications