创建友元模板函数时出现意外错误
Unexpected error when creating a friend template function
家伙我正试图为我的类SortedList创建一个模板。我想重载<<操作符,所以我在类中声明了一个友元函数,但每次我试图编译main.cpp时,我都会得到以下错误:模板id的operator<& lt;…'不匹配任何模板声明。下面是main.cpp
中的代码int main()
{
SortedList<int, int> lst, lst2;
int a = 2;
lst.addItem(2, 3);
cout << lst << endl;
return 0;
}
这是模板类的声明和定义
template <typename K, typename V>
struct Node
{
K key;
V value;
Node<K, V>* next;
};
template <typename K, typename V>
class SortedList
{
friend ostream& operator << <K, V>(ostream&, const SortedList&);
public:
SortedList();
SortedList(const SortedList&);
SortedList& operator = (const SortedList&);
~SortedList();
void addItem(const K&, const V&);
void removeElem(const K&);
void removeAt(int);
bool remove(const K&);
private:
Node<K, V>* start;
size_t n;
};
你可以在c++常见问题解答中找到一个很好的解释,也许我将引用它:
当编译器在类定义正确。那一刻它还不知道友元函数本身就是模板。
调用操作符+时或operator<& lt;函数,此假设导致编译器生成对非模板函数的调用,但链接器会这样做给你一个"未定义的外部"错误,因为你从来没有定义了那些非模板函数
一个解决方案是:
template<typename K, typename V> class SortedList;
template<typename K, typename V> std::ostream& operator<< (std::ostream& o, const SortedList<K,V>& x);
在最上面,这是你的类的一个例子(编译完美,只是什么都不做)
相关文章:
- 排序程序的意外错误代码
- 在 c++ 中声明向量时出现意外错误
- 在第三个 pary 函数中使用矢量引用时出现意外错误
- 创建进程失败,意外错误
- 找到printf的意外错误,该格式为0.1F,用于四舍五入数字
- 使用-PG选项构建时出现不同的意外错误
- 未声明的标识符和类型"int"从 main 调用类时出现意外错误
- 试图读取AIFF文件意外错误与指针位置等有关
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- 意外错误"no matching function for call to",需要没有参数的构造函数
- 构建 tesseract3 训练模块时出现意外错误:"not declared in this scope"
- 在 C++ 中使用关键字 "this" 时出现意外错误
- 在我的Mac OSX El Capitan上编译带有意外错误的简单C++类
- 尝试使用模板创建类的新实例,意外错误
- C++处理意外错误
- Visual Studio 中的意外错误包含文件
- 将 c++ 程序与 mysql 连接时出现意外错误
- C++运算符意外错误
- 意外错误ID -不确定原因(c++)
- 模板类中的变量模板-意外错误(可能存在错误?)