/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Template - 2 errors
Fra : Claus Jørgensen


Dato : 18-04-05 20:48

Hej

Jeg har forsøgt at lave en template funktion som skal returnere en række
tal,
men får følgende fejlmeddelse i MS Visual C++ Introductory Edition:

main.obj : error LNK2001: unresolved external symbol "public: class
std::vector<int,class std::allocator<int> > __thiscall
testF<int>::fra(void)"
(?fra@?$testF@H@@QAE?AV?$vector@HV?$allocator@H@std@@@std@@XZ)
Debug/main.exe : fatal error LNK1120: 1 unresolved externals

Koden jeg bruger er delt op i tre filer:

// test.h

#ifndef testF_h
#define testF_h

#include <vector>

template <class T>
class testF {
public:
std::vector<T> fra();
private:
std::vector<T> vec;
};

#endif
************************************************
// test.cpp

#include "test.h"

using std::vector;

template <class T>
vector<T> testF<T>::fra()
{
vec.push_back(48);
vec.push_back(123);
vec.push_back(15);

return vec;
}
************************************************
// main.cpp

#include <iostream>
#include <vector>
#include "test.h"

using std::cout; using std::endl; using std::vector;

int main()
{
testF<int> file_obj;
vector<int> values;
values = file_obj.fra();

for (int j=0; j < values.size(); j++) {
cout << values[j] << "\t";
}
cout << endl;
return 0;
}

Hvad kan jeg gøre for at få de to fejl fjernet?

Venlig hilsen
Claus Jørgensen



 
 
Bertel Brander (18-04-2005)
Kommentar
Fra : Bertel Brander


Dato : 18-04-05 21:33

Claus Jørgensen wrote:
> Hvad kan jeg gøre for at få de to fejl fjernet?

Du er vist nødt til at flytte funktionerne fra din template
class fra .cpp filen til .h filen, så kompileren kan se
dem når den kompilerer main.cpp


--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Claus Jørgensen (18-04-2005)
Kommentar
Fra : Claus Jørgensen


Dato : 18-04-05 21:49

> Du er vist nødt til at flytte funktionerne fra din template
> class fra .cpp filen til .h filen, så kompileren kan se
> dem når den kompilerer main.cpp


Så jeg får følgende .h fil?

template <class T>
class testF {
public:
std::vector<T> fra();
private:
std::vector<T> vec;
};

template <class T>
vector<T> testF<T>::fra()
{
vec.push_back(48);
vec.push_back(123);
vec.push_back(15);

return vec;
}

Hvis jeg har forstået dig rigtigt, så ville jeg gerne undgå dette, da jeg
gerne ville dele min kode op, så jeg har funktioner i .cpp fil og klasser i
en .h fil. Hvis jeg undlader at bruge template, så virker det fint, når
funktionen er i min test.cpp fil. Derfor undrer det mig, hvis jeg bliver
nødt til at flytte funktionen over i min .h fil. Er det noget jeg må
acceptere, hvis jeg vil bruge template?

Venlig hilsen
Claus Jørgensen



Bertel Brander (18-04-2005)
Kommentar
Fra : Bertel Brander


Dato : 18-04-05 21:59

Claus Jørgensen wrote:
> Hvis jeg har forstået dig rigtigt, så ville jeg gerne undgå dette, da jeg
> gerne ville dele min kode op, så jeg har funktioner i .cpp fil og klasser i
> en .h fil. Hvis jeg undlader at bruge template, så virker det fint, når
> funktionen er i min test.cpp fil. Derfor undrer det mig, hvis jeg bliver
> nødt til at flytte funktionen over i min .h fil. Er det noget jeg må
> acceptere, hvis jeg vil bruge template?

Ja, der er vist ikke så meget man kan gøre.
Nogen laver en fil (f.ex. med .inl som extension) hvori man putter
koden, denne fil inkluderes så af headerfilen. Så har man en opdeling
af koden i class definition og implementation.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Bertel Brander (18-04-2005)
Kommentar
Fra : Bertel Brander


Dato : 18-04-05 22:12

Bertel Brander wrote:
> Claus Jørgensen wrote:
>
>> Hvis jeg har forstået dig rigtigt, så ville jeg gerne undgå dette, da jeg
>> gerne ville dele min kode op, så jeg har funktioner i .cpp fil og
>> klasser i
>> en .h fil. Hvis jeg undlader at bruge template, så virker det fint, når
>> funktionen er i min test.cpp fil. Derfor undrer det mig, hvis jeg bliver
>> nødt til at flytte funktionen over i min .h fil. Er det noget jeg må
>> acceptere, hvis jeg vil bruge template?
>
>
> Ja, der er vist ikke så meget man kan gøre.
> Nogen laver en fil (f.ex. med .inl som extension) hvori man putter
> koden, denne fil inkluderes så af headerfilen. Så har man en opdeling
> af koden i class definition og implementation.
>

Se også punkt 34.13:
http://www.parashift.com/c++-faq-lite/containers-and-templates.html

Så vidt jeg ved er export keyword'et standard C++ men den er så
vidt jeg ved kun én kompiler der understøtter det.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Claus Jørgensen (18-04-2005)
Kommentar
Fra : Claus Jørgensen


Dato : 18-04-05 23:23

> > Ja, der er vist ikke så meget man kan gøre.
> > Nogen laver en fil (f.ex. med .inl som extension) hvori man putter
> > koden, denne fil inkluderes så af headerfilen. Så har man en opdeling
> > af koden i class definition og implementation.

Ok - så vil jeg lade funktionen blive i .h filen. Det virker da i hvert
fald.

> Se også punkt 34.13:
> http://www.parashift.com/c++-faq-lite/containers-and-templates.html
>
> Så vidt jeg ved er export keyword'et standard C++ men den er så
> vidt jeg ved kun én kompiler der understøtter det.

Det vil jeg læse nærmere på. Tak for hjælpen.

Venlig hilsen
Claus Jørgensen



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste