Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

1

08.01.2007, 00:19

template friend operator

So, ich kann leider nicht den Originalcode posten, da ich das Problem inzwischen anders lösen musste (zwingender Abgabetermin)

Einfach mal eine eine kleine Klasse:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <typename Type>
class Foo
{
private:
    //...

public:
    //...

    friend std::ostream& operator << (std::ostream& Stream, Foo<Type>& bar);
}


template <typename Type>
std::ostream& operator << (std::ostream& Stream, Foo<Type>& bar)
{
   //...

}



in irgendeiner Funktion rufe ich dann den operator auf

C-/C++-Quelltext

1
2
3
    Foo<int> a;
    //...

    std::cout << a;


Mit dem Erfolg, dass es einen Linkerfehler gibt, der operator sei nicht definiert. Kennt jemand das Prob und weiß, wie man es sauber lösen kann?
(Hab es aus Zeitgründen dann ohne friend mit gettern und settern gemacht...)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

08.01.2007, 00:25

Hi!

Entweder so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
template< typename Type >
class Foo
{
public:
    template< typename T >
    friend std::ostream& operator<<( std::ostream& stream, Foo< T >& bar );
};

template< typename T >
std::ostream& operator<< ( std::ostream& stream, Foo< T >& bar )
{
    // In Stream schreiben

    return stream;
}


Oder so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
template< typename Type >
class Foo
{
public:
    friend std::ostream& operator<<( std::ostream& stream, Foo< Type >& bar )
    {
        // In Stream schreiben

        return stream;
    }
};
@D13_Dreinig

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

3

08.01.2007, 00:28

Super, vielen Dank :)

Besonders die 2. Lösung ist interessant, wusste gar nicht, dass man friends auch innerhalb der Klasse definieren kann! Wieder was wo man sich Tipparbeit sparen kann.

riCo

Treue Seele

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

4

15.02.2007, 08:09

Ich sitz jetzt seit einiger Zeit an dem Problem und hab es selbst gelöst, aus reiner Verzweiflung. Da soll jemand alleine drauf kommen, vorallem die operator haben mir probleme bereitet. Wieder was dazugelernt...
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Werbeanzeige