Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 13 odgovora
  • 5.660 pregleda

Najnovija ↓

linker error...zasto? 24.01.2005. u 12:11 · pre 265 meseci #1
Kad u dole navedenom kodu funkciju za preklapanje operatora definisem izvan tjela klase program se kompajlira ali je javlja linker error.

Jel ima neko logicno objasnjenje...?

code:
/////////////////////////
using namespace std;
template<class T1,class T2>
class Par{
private:
T1 first;
T2 second;
public:
Par(){};
Par(T1 aa,T2 bb):first(aa),second(bb){}
void print();
friend ostream& operator<<(ostream &os,const Par<T1,T2>&par){
os<<"( "<<par.first<<", "<<par.second<<" ) ";
return os;
}
};
template<class T1,class T2>
void Par<T1,T2>::print(){
cout<<first;
cout<<second;
}




int main(int argc, char* argv[])
{
Par<int,int> pr(56,45);
cout<<pr;//ovo radi ... kad se definise unutar klase....
cin.get();
return 0;
}

unaprijed hvala

pozdrav
Re: linker error...zasto? 24.01.2005. u 14:42 · pre 265 meseci #2
Pošalji i tekst greške, da ne bismo morali da čitamo misli.

f
Re: linker error...zasto? 24.01.2005. u 15:16 · pre 265 meseci #3
A pošalji i definiciju operatora << van klase. Da je nisi zaboravio?
Potpis
IOCC
Re: linker error...zasto? 24.01.2005. u 18:11 · pre 265 meseci #4
to se meni događalo ako sam odabrao nova aplikacija umjesto console i problemi sa tform kod istog ;)
Re: linker error...zasto? 25.01.2005. u 13:23 · pre 264 meseca #5
def izvan klase..

Code:

#include<iostream>
using namespace std;
template<class T1,class T2>
class Par{
   private:
       T1 first;
       T2 second;
   public:
      Par(){};
      Par(T1 aa,T2 bb):first(aa),second(bb){}
      void print();
      friend ostream& operator<<(ostream &,const Par<T1,T2>&);

};
template <typename T1,typename T2>
ostream& operator<<(ostream &os,const Par<T1,T2>&par){
          os<<"( "<<par.first<<", "<<par.second<<" ) ";
          return os;
}    
template<class T1,class T2>
void Par<T1,T2>::print(){
    cout<<first;
    cout<<second;
}    




linker error
Code:

  [Linker error] undefined reference to `operator<<(std::ostream&, Par<int, int> const&)' 


// filmil: code tagovi
Re: linker error...zasto? 25.01.2005. u 21:11 · pre 264 meseca #6
Welcome to the world of friend templates ;)

Doteraj deklaraciju operatora da izgleda ovako (obrati pažnju na dodatni par uglastih zagrada):

Code:

friend ostream& operator<< <>(ostream &,const Par<T1,T2>&);


Ko kaže da je C++ komplikovan jezik? :)
Potpis
IOCC
Re: linker error...zasto? 09.02.2005. u 09:31 · pre 264 meseca #8
Evo rjesenja, sada radi.

Code:

#include<iostream>

using namespace std;

template<typename T1,typename T2>
class Par {
    T1 first;
    T2 second;
public:
    Par() { }
    Par(T1 aa,T2 bb) : first(aa), second(bb) { }
    void print() const;
    template <typename T1,typename T2>
    friend ostream & operator<< (ostream &os,const Par<T1, T2> &par);

};

template <typename T1,typename T2>
ostream & operator << (ostream &os, const Par<T1, T2> &par)
{
    os<<"( "<<par.first<<", "<<par.second<<" ) ";
    return os;
}

template<class T1,class T2>
void Par<T1,T2>::print() const
{
    cout<<first;
    cout<<second;
}

int main ()
{
    Par<int,int> pr(56,45);
    cout << pr;                //ovo radi sada uvijek
}


Znaci kada pises friend funkciju tada i unutar klase moras navesti template <typename ...>
Re: linker error...zasto? 09.02.2005. u 14:21 · pre 264 meseca #9
Citat:
ivbrcic: 
Znaci kada pises friend funkciju tada i unutar klase moras navesti template <typename ...>


Ne moraš. Dovoljan je par uglastih zagrada.
Potpis
IOCC
Re: linker error...zasto? 10.02.2005. u 08:43 · pre 264 meseca #10
Ako mi to pronades u standardu, onda cu priznati da "ne moras".

Re: linker error...zasto? 10.02.2005. u 15:27 · pre 264 meseca #13
Život je pun malih svakodnevnih pobeda...

f
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme