gpt4 book ai didi

重载运算符时出现 C++ 函数模板偏特化错误

转载 作者:行者123 更新时间:2023-11-30 05:19:47 28 4
gpt4 key购买 nike

我已经检查了这个帖子 C++ function template partial specialization?

但是,下面的错误还是让人费解。为什么 template-id 与函数声明不匹配?

error: function template partial specialization ‘operator<< <T>’ is not allowed
ostream& operator<< <T>( ostream& out, RBTree<T>& rbt)

error: template-id ‘operator<< <int>’ for ‘std::ostream& operator<<(std::ostream&, RBTree<int>&)’ does not match any template declaration
friend ostream& operator<< <T>( ostream& out, RBTree<T>& rbt);

我正在为任何输入类型 T 实现类 RBTree 的红黑树。

class RBTree{
friend ostream& operator<< <T>( ostream& out, RBTree<T>& rbt);
public:
RBTree(){ nil = new RBTreeNode<T>( BLACK ); root = nil; }
.....
};


template<class T>
ostream& operator<< <T>( ostream& out, RBTree<T>& rbt)
{
rbt.InOrder( rbt.GetRoot(), out );
return out;
}

最佳答案

您尝试实现的函数不是部分特化,而是重载。因此,您不应尝试使用专门化语法。将您的运算符实现更改为(注意第二行 <T> 后面没有 operator<<):

template<class T>
ostream& operator<< ( ostream& out, RBTree<T>& rbt)
{
rbt.InOrder( rbt.GetRoot(), out );
return out;
}

关于重载运算符时出现 C++ 函数模板偏特化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973408/

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