gpt4 book ai didi

c++ - 未定义对模板类中友元函数的引用

转载 作者:太空狗 更新时间:2023-10-29 21:25:40 25 4
gpt4 key购买 nike

以下代码在文件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文件中,我使用了这个模板类,编译的时候出现了<<运算符重载函数 undefined reference 的错误。对这种情况感到困惑。当我把函数的定义放在类中时,它就起作用了。操作系统为Ubuntu,编译器为g++。

最佳答案

以下应该有效:

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)
{
...
}

关于c++ - 未定义对模板类中友元函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13658004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com