Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

makefile & templates

[es] :: C/C++ programiranje :: makefile & templates

[ Pregleda: 4165 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jeremy
igor jeremic
Beograd

Član broj: 3740
Poruke: 73
*.matf.bg.ac.yu

ICQ: 13289333
Sajt: www.jwork.net


Profil

icon makefile & templates08.05.2002. u 10:08 - pre 267 meseci
Imam problem kod smestanja klasa u posebne module, u klasama koristim sablone. Napisacu vam ovde neki prost primer klase za objekat koji ne radi nista narocito ali ne mogu da ga prevedem komandom make, dok kad ukinem sablone i umesto T svuda stavim npr int sve se normalno prevede :(

greska je:
class.h: In function `void __static_initialization_and_destruction_0(int, int)':
class.h:15: no matching function for call to `klasa<long int>::klasa ()'
class.h:11: candidates are: klasa<long int>::klasa(long int)
class.h:13: klasa<long int>::klasa(const klasa<long int> &)

---[ makefile ] ------

test: main.o class.o
g++ -o test main.o class.o

main.o: main.cc class.h
g++ -c -o main.o main.cc

class.o: class.cc class.h
g++ -c -o class.o class.cc

---[ class.h ] -------

#ifndef class_h
#define class_h

extern "C++" {

template <class T>
class klasa {
private:
T a;
public:
klasa( T i );
void write();
};

klasa <long int> t;

#endif

}

---[ class.cc ]-----

#include <iostream>
#include "class.h"

extern "C++" {

template <class T>
klasa <T> ::klasa( T i ) {
a=i;
}

template <class T>
void klasa <T> ::write() {
cout << a << endl;
}


}

---[ main.cc ]--------

#include <iostream>
#include "class.h"

main() {
klasa <long int> a (15);
a.write();
}

------------------------

sto se tice prevoda sve je uredu, problem je sa linkovanjem :(

pozdrav, Igor

Igor Jeremic
www.jwork.net
 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
212.124.183.*

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: makefile & templates08.05.2002. u 17:06 - pre 267 meseci
Fali ti default kotruktor za klasu. Ali imas jos par grescica.
Citat:
jeremy:
---[ class.h ] -------

#ifndef class_h
#define class_h

extern "C++" {

template <class T>
class klasa {
private:
T a;
public:
klasa( T i );
void write();
};

klasa <long int> t;

Ovde zoves default constructor, a on ne postoji. Kompajler ga sam pravi samo ako
klasa nema nijedan drugi konstruktor, a ova ima.

Inace, zasto definises promenljivu u hederu? Tako ce svaki fajl koji ukljuci ovaj heder
imati svoju kopiju t. Javice se ovde i greska u linkovanju - dupliran simbol.
Najgore je sto mislim da prema najnovijim izmenama C++ kompajler/linker nece ni prijaviti gresku, a imaces nekoliko kopija t jer se static podrazumeva za sve promenljive koje nisu extern, ali nemoj da me drzis za rec.
Stavi u heder:
Code:

extern klasa <long int> t; 

a u neki cc fajl:
Code:

klasa <long int> t; 


Citat:

---[ class.cc ]-----

#include <iostream>
#include "class.h"

extern "C++" {

template <class T>
klasa <T> ::klasa( T i ) {
a=i;
}

template <class T>
void klasa <T> ::write() {
cout << a << endl;
}


}


telo template funkcija je u cc fajlu. I tu ce biti greske kod linkovanja posto
kompajler nece napraviti ove dve funkcije za long int. Ili prebaci template definicije funkcija u heder
ili u main.cc dodaj include i cc fajla.
Moze i ovako da ostane ako na kraju class.cc eksplicitno instanciras klasu za long int:
Code:

template klasa<long int>;

Ovo moze da bude losa ideja posto ce sablon onda moci da se koristi samo za long int,
odnosto za one T za koje si eksplicitno instancirao klasu.
Citat:

---[ main.cc ]--------
#include <iostream>
#include "class.h"

main() {
klasa <long int> a (15);
a.write();
}



[code]
int main () {
...
return 0;
}
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: makefile & templates08.05.2002. u 17:08 - pre 267 meseci
Već smo dva puta objašnjavali ovo.

Pogledaj

http://www.elitesecurity.org/tema.php?TopicID=7032

i

http://www.elitesecurity.org/tema.php?TopicID=5549




 
Odgovor na temu

[es] :: C/C++ programiranje :: makefile & templates

[ Pregleda: 4165 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.