以下代码位于Heap.h文件中
template <typename T>
class Heap {
public:
Heap();
Heap(vector<T> &vec);
void insert(const T &value);
T extract();
T min();
void update(int index, const T &value);
/* for debug */
friend ostream &operator<< (ostream &os, const Heap<T> &heap);
#if 0
{
for (int i = 0; i < heap.vec_.size(); i++) {
os << heap.vec_[i] << " ";
}
return os;
}
#endif
private:
void minHeapify(int index);
int left(int index);
int right(int index);
int parent(int index);
void swap(int, int);
vector<T> vec_;
};
template <typename T>
ostream &operator<<(ostream &os, const Heap<T> &heap)
{
for (int i = 0; i < heap.vec_.size(); i++) {
os << heap.vec_[i];
}
return os;
}
在testheap.cpp文件中,我在编译时使用这个模板类,对&lt;&lt;&lt;&lt;发生运算符重载功能错误。对这种情况感到困惑。 当我把函数的定义放在类中时,它可以工作。 操作系统是Ubuntu,编译器是g ++。
答案 0 :(得分:3)
以下内容应该有效:
template <typename T>
class Heap {
public:
...
template<class U>
friend ostream &operator<<(ostream &os, const Heap<U> &heap);
...
};
template <typename T>
ostream &operator<<(ostream &os, const Heap<T> &heap)
{
...
}
答案 1 :(得分:0)
试试这个:
template <typename T2>
friend ostream &operator<< (ostream &os, const Heap<T2> &heap);
我遇到了同样的问题。这是question