undefined reference to operator<< [дубликат]

261
26 ноября 2016, 18:59

На данный вопрос уже ответили:

  • Перегрузка операторов >> и << в шаблонном классе как дружественных функций 3 ответа

есть класс с перегруженным оператором <<

template<class T>
class Array
{
private:
   //...
public:
    //...
    friend ostream& operator<<(ostream &os, const Array<T> &obj);
};

Реализация перегрузки такая(реализация, как и положено, в хедере):

template<class T>
ostream& operator<<(ostream &os, const Array<T> &obj)
{
    //..
    return os;
}

В мейне пишу следующий код:

cout << "arr: " << arr << endl;

В результате выдает ошибку:

ошибка: undefined reference to `operator<<(std::ostream&, Array const&)'

В чем проблема? Перечитал уже все и русско и англо язычные форму, ни одни советы не помогают.

Answer 1

Объявите друга (он же у вас шаблонный) так:

template<typename U>
friend ostream& operator<<(ostream &os, const Array<U> &obj);
READ ALSO
Несколько мод числового ряда c++

Несколько мод числового ряда c++

Делаю задания по книге Бьярне Страуструпа "Программирование: принципы и практика с использованием C++, 2-е издание"Во главе 4, задании 16 надо...

283
MinGW или Cygwin?

MinGW или Cygwin?

Раньше просто компилировал с помощью g++ на Ubuntu, вытягивая компилятор с помощью пакетного менеджера:

358
стандарты GNU C++ и GNU C++11

стандарты GNU C++ и GNU C++11

Почему gcc компилирует этот код для стандарта GNU C++, но не компилирует для GNU C++11?

261
return &hellip; или return (&hellip;)

return … или return (…)

Часто вижу, что выражение, которое возвращает return, заключено в круглые скобкиНапример, в хедере set в Visual Studio 2015 во всех функциях, возвращающих...

231