У меня есть два калиброванных перегруженный друг функции в моем Set классе, которые продолжают посылать назад ошибкунеопределенная ссылки на весь друг функцию
Templatedriver.cpp:(.text+0x2a0): undefined reference to `std::ostream& operator<< <int>(std::ostream&, Set<int> const&)'
и
Templatedriver.cpp:(.text+0x2dd): undefined reference to `std::ostream& operator<< <int>(std::ostream&, Set<int> const&)'
и так далее (просто изменяя выход для double, char и т. д.) Я искал это, и наиболее распространенный ответ здесь заключается в том, чтобы сделать объявление вперед, а затем объявить его как друга в классе, я сделал это и все еще получаю неопределенную ссылку
это мой опережающее объявление
template <class T> istream& operator>>(istream&, Set<T>&);
template <class T> ostream& operator<<(ostream&, const Set<T>&);
и я объявляю их в них в классе как таковой
template <class T>
class Set {
friend istream& operator>> <>(istream&, Set<T>&);
template <class Y> */friend ostream& operator<< <>(ostream&, const Set<T>&);
....//rest of class
}
и эти определения
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);
}
Theres несколько более перегруженные классы имейте проблемы с, но все равно проблема
ли определения в файле заголовка? – immibis
вопрос immibis важный. Если ваш экземпляр 'Set' не может видеть реализации 'operator <<' и 'operator >>', то они никогда не получат экземпляр. –
md5i
нет, определения находятся в Set.cpp, если они находятся в файле заголовка? –