Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Templates, friends, namespaces und unresolved external

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.05.2004, 12:31 Uhr
gunkl



Hallo zusammen!

Ich habe folgendes Problem. Vielleicht weiss jemand die Antwort. Wäre ein grosse Hilfe.

C++:
namespace ASI
{
    template<class T> class Interval
    {
        ...
        Interval add(const Interval& z,unsigned int rc = _RC_UP);
    }
};



Ich kann "add" von einer anderen dll aufrufen. Alles geht.

Nun ändere ich auf

C++:
namespace ASI
{
    template<class T> class Interval
    {
        ...
        friend Interval add(const Interval& x,const Interval& z,unsigned int rc = _RC_UP);
    }
};


will also nicht mehr x.add(y) sondern add(x,y) haben.

Nach dieser Änderung kommt die Fehlermeldung
"Nichtaufgeloestes externes Symbol "class ASI::Interval<double> __cdecl ASI::add(class ASI::In...."

Ich glaube, dass es etwas mit dem namespace zu tun hat, bin aber nicht sicher. Weiss jemand von euch bescheid?

Dieser Post wurde am 04.05.2004 um 14:02 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.05.2004, 12:49 Uhr
virtual
Sexiest Bit alive
(Operator)


Naja, du musst eben auch add deklarieren. Indem du ein Friend davor schreibst, sagst Du ja nur, daß das ein friend ist, mehr nicht. Besser wäre:

C++:
namespace ASI
{
    template<class T> class Interval
    {
        ...
        friend Interval add(const Interval& x,const Interval& z,unsigned int rc = _RC_UP);
    }
[b]
    template<class T>
    Interval<T> add(const Interval<T>& x,const Interval<T>& z,unsigned int rc = _RC_UP)
    {
        ... your code here ...
    }
[/b]    
};


Und eben daran denken: die ganzen Template funktionen immer schön im Header definieren.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.05.2004, 13:03 Uhr
(un)wissender
Niveauwart


So ist es korrekt.


C++:
namespace ASI
{
    //forward Interval
    template<class T> class Interval;
    
   //declare add
    template<class T>
    Interval<T> add(const Interval<T>& x,const Interval<T>& z,unsigned int rc = _RC_UP);



   template<class T> class Interval
    {
        //friend for all instances
        friend Interval<T> add<>(const Interval& x, const Interval& z, unsigned int rc = _RC_UP);
    };

  //definition von add
    template<class T>
    Interval<T> add(const Interval<T>& x, const Interval<T>& z, unsigned int rc = _RC_UP)
    {
        ... your code here ...
    }
    
}


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 04.05.2004 um 13:05 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: