ich in meiner Klasse Set zwei Templat überladene Freund Funktionen haben, die den Fehlerundefined reference to all friend-Funktionen
Templatedriver.cpp:(.text+0x2a0): undefined reference to `std::ostream& operator<< <int>(std::ostream&, Set<int> const&)'
und
Templatedriver.cpp:(.text+0x2dd): undefined reference to `std::ostream& operator<< <int>(std::ostream&, Set<int> const&)'
und so weiter immer zurückschicken (einfaches Ändern der heraus für double, char, etc.) ich diese gesucht und die häufigste Antwort auf hier ist eine vorwärts-Deklaration zu tun, dann als Freund in der Klasse zu erklären, ich habe dies getan, und immer noch einen nicht definierten Referenz
dies ist meine Vorwärtsdeklaration
template <class T> istream& operator>>(istream&, Set<T>&);
template <class T> ostream& operator<<(ostream&, const Set<T>&);
und ich erkläre sie in ihnen in der Klasse als solche
template <class T>
class Set {
friend istream& operator>> <>(istream&, Set<T>&);
template <class Y> */friend ostream& operator<< <>(ostream&, const Set<T>&);
....//rest of class
}
und das sind die Definitionen
template <class T> istream& operator>>(istream& is, Set<T>& S){
S.input();
return(is);
}
template <class T> ostream& operator<<(ostream& os, const Set<T>& S){
S.display();
return(os);
}
ein paar mehr überladenen Klassen Theres Ich habe Probleme mit, aber es ist das gleiche Problem
die Definitionen in der Header-Datei sind? – immibis
immibis Frage ist wichtig. Wenn Ihre Instanz von 'Set' die Operatoren 'operator <<' und 'operator >>' nicht sehen kann, werden sie niemals instanziiert. –
md5i
nein, die Definitionen sind in Set.cpp sollten sie dann in der Header-Datei sein? –