#ifndef _QUEUE_HPP
#define _QUEUE_HPP
#include <iostream>
#include "Node.hpp"
namespace std{
template<typename T>
class Queue{
public:
class Node<T>* front;
class Node<T>* rear;
Queue();
void enqueue(T data);
T dequeue();
~Queue();
template<class U>
friend std::ostream& operator<<(std::ostream& out,Queue<U> const& queue);
};
template<class classT>
std::ostream& operator<<(std::ostream& out,Queue<classT> const& queue);
template class Queue<double>;
template std::ostream& operator<<(std::ostream& out,Queue<double> const& queue);
}
#endif
Compile result
g++ -std=c++11 main.cpp Stack.o Queue.o -o test
In file included from main.cpp:2:0:
Queue.hpp: In instantiation of ‘std::ostream& std::operator<<(std::ostream&, const std::Queue<classT>&) [with classT = double; std::ostream = std::basic_ostream<char>]’:
Queue.hpp:25:81: required from here
Queue.hpp:25:81: error: explicit instantiation of ‘std::ostream& std::operator<<(std::ostream&, const std::Queue<classT>&) [with classT = double; std::ostream = std::basic_ostream<char>]’ but no definition available [-fpermissive]
mplate std::ostream& operator<<(std::ostream& out,Queue<double> const& queue);
Problem:
What happens with my code? I believe I have template operator<<being defined but the compiler can't find a definition.