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

Sablonske (Template) static metode??

[es] :: C/C++ programiranje :: Sablonske (Template) static metode??

[ Pregleda: 1600 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BinaryRuler

Član broj: 73518
Poruke: 189
*.dynamic.isp.telekom.rs.



+3 Profil

icon Sablonske (Template) static metode??07.04.2010. u 20:51 - pre 170 meseci
Naisao sam na problem sa linkovanjem kada sam hteo da napravim sablonsku statik metodu. Metoda lepo radi kada se koristi unutar te klase ali javlja se problem sa linkovanjem kada se koristi izvan klase.

error:
main.obj : error LNK2019: unresolved external symbol "public: static void __cdecl CUtility::foo<long>(long)" (??$foo@J@CUtility@@SAXJ@Z) referenced in function _main
fatal error LNK1120: 1 unresolved externals

Evo koda:

Utility.h
Code:

#ifndef UTILITY_H
#define UTILITY_H

class CUtility
{
public:
    template<typename T1>
    static void foo(T1 value);
    template<typename T2>
    static void foo1(T2 value);
};
#endif


Utility.cpp
Code:

#include "Utility.h"

template<typename T1>
void CUtility::foo(T1 value)
{
    long k;
    foo1<long>(k);
    value++;
    //.............
}
    
template<typename T2>
void CUtility::foo1(T2 value)
{
    value++;
    //...........
}


main.cpp
Code:

#include "Utility.h"

int main()
{
    long i;
    CUtility::foo<long>(i);//Bez ove linije linkuje
    return 0;
}


Ne znam gde gresim.
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Sablonske (Template) static metode??07.04.2010. u 21:24 - pre 170 meseci
Nacin na koji pises kod se ne koristi za template klase. U slucaju template klasa generalno pravilo je da sav kod ide u heder.

Sto ce reci:

Code:


#ifndef UTILITY_H
#define UTILITY_H

class CUtility
{
public:
    template<typename T1>
    static void foo(T1 value) {
         //neki kod
    }
    template<typename T2>
    static void foo1(T2 value) {
        //neki kod
    }
};

#endif /* UTILITY_H */


Tko leti vrijedi
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Sablonske (Template) static metode??07.04.2010. u 21:30 - pre 170 meseci
A da li postoji nacin da se stavi implementacija u separatni fajl.
Posto sam negde na netu nasao primer (postovacu kasnije link), ali nisu bile u pitanju static metode.
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Sablonske (Template) static metode??07.04.2010. u 21:35 - pre 170 meseci
Moja greska, izgleda da ipak mora u heder.
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Sablonske (Template) static metode??07.04.2010. u 21:49 - pre 170 meseci
Moze i to ali sve mora da bude ukljuceno u cpp fajl pre nego sto se moze koristiti.

Na primer:

Code:

#ifndef UTILITY_H
#define UTILITY_H

class CUtility
{
public:
    template<typename T1>
    static void foo(T1 value);
    template<typename T2>
    static void foo1(T2 value);
};

//Obrati paznju na ovo
#include "util.inc"

#endif /* UTILITY_H */


Code:

//util.inc file
template<typename T1>
void CUtility::foo(T1 value)
{
    long k;
    foo1<long>(k);
    value++;
    //.............
}
    
template<typename T2>
void CUtility::foo1(T2 value)
{
    value++;
    //...........
}


I na kraju cpp

Code:

#include "Utility.h"

int main() {
  CUtility::foo<long>(1);
  return 0;
}






Tko leti vrijedi
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Sablonske (Template) static metode??07.04.2010. u 22:06 - pre 170 meseci
Ok hvala puno na odgovoru.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Sablonske (Template) static metode??

[ Pregleda: 1600 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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