Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » operator<< + Klassen-Template

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
28.01.2007, 15:51 Uhr
TypusM



Folgender Code ohne Templates funktioniert einfachfrei:


Code:
class graph
{
private:
  string gr_name;
public:
  graph(string t) : gr_name(t) { }
  friend ostream& operator<<(ostream &,const graph &);
    {
    out << g.gr_name;
    return(out);
    }
}


Doch kaum wenn ich Templates benutze, dann erscheint folgende Fehlermeldung vom Compiler: "[Linker Fehler] Unresolved external 'operator <<(_STL::basic_ostream<char, _STL::char_traits<char> >&, const graph<char, int>&)' referenced from C:\STUDIUM\....MAIN.OBJ".

Code:

Code:
template <typename T1, typename T2>
class graph
{
private:
  string gr_name;
public:
  graph(string t) : gr_name(t) { }
  friend ostream& operator<<(ostream &,const graph<T1,T2> &);
    {
    out << g.gr_name;
    return(out);
    }
}


Woran könnte der Fehler liegen?? Der Fehler tritt erst auf, wenn ich in meiner main.cpp:

Code:
graph<char,int> g1("Graph");
cout << g1;

hineinschreiben. Sollte ich "cout<<g1;" weglassen, meldet er nix, macht ja aber kein Sinn, weil i es ja nutzen will ^^. Das keine Typvariablen in der Klasse stehen, liegt daran, dass ich hier etwas der Übersichthalter gekürzt habe.

Vielen Dank im vorraus.

Dieser Post wurde am 28.01.2007 um 15:52 Uhr von TypusM editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.01.2007, 19:10 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Das muss

C++:
friend ostream& operator<<(ostream & out,const graph<T1,T2> & g) {}

heißen
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.01.2007, 21:52 Uhr
TypusM



Allein daran lag es nicht....


C++:
template <typename T1, typename T2> class graph;
template <typename T1, typename T2>
friend ostream& operator<<(ostream &,const graph<T1,T2> &);

<template <typename T1, typename T2>
class graph
{
private:
  string gr_name;
public:
  graph(string t) : gr_name(t) { }
  friend ostream& operator<< <>(ostream &,const graph<T1,T2> &);
}

template <typename T1, typename T2>
friend ostream& operator<< <>(ostream & out,const graph<T1,T2> &g);
    {
    out << g.gr_name;
    return(out);
    }


So läufst nu...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.01.2007, 22:22 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



C++:
#include <iostream>
#include <string>

template<typename T1, typename T2>
class Graph
{
private:
    std::string gr_name;
public:
    Graph(std::string name) : gr_name(name) { }
    friend std::ostream& operator<<(std::ostream& os, Graph<T1, T2>& gr)
    {
        os << gr.gr_name;
        return os;
    }
};

int main(int argc, char* argv[])
{
    Graph<int, int> graph("Test");
    std::cout << graph << std::endl;
    std::cin.get();
    return EXIT_SUCCESS;
}

Das reicht doch vollkommen?!
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: