我用C++编写了一个泛型树,我的任务之一是创建一个树的树。为此,我需要在树之间创建一个运算符。假设我可以从根目录中的信息中获得我所知道的所有比较信息。我创建了这些模板操作符重载。
template <class T>
class tree {
tree_node<T>* root;
tree_node<T> *largest;
public:
void roll(tree_node<T>* node);
tree();
~tree();
tree_node<T>* get_root();
void set_root(tree_node<T>*);
tree_node<T>* get_largest();
tree_node<T>* most_right(tree_node<T>* node);
void update_largest(tree_node<T>* node);
void update_largest_end(tree_node<T>* node);
tree_node<T>* find(T& data);
bool insert(T& data);
void del(tree_node<T>* node);
bool del(T& data);
void reverse_inorder(list<T>& list);
void partial_reverse_inorder(list<T>& list,int num);
friend bool operator<(const tree<T>& tree1,const tree<T>& tree2);
friend bool operator==(const tree<T>& tree1,const tree<T>& tree2);
};
template<class T>
bool operator<(const tree<T>& tree1,const tree<T>& tree2){
return tree1.get_root()->data<tree2.get_root()->data; //assuming < operator
}
template <class T>
bool operator==(const tree<T>& tree1,const tree<T>& tree2){
return tree1.get_root()->data==tree2.get_root()->data; //assuming == operator
}
但是当我尝试编译它时,我得到了以下错误信息:
E:\technion\mivnei\hw1\tree.h:75:68:警告:友元声明“bool operator<(const tree&;,const tree&;)”声明一个非模板函数[-wnon-template-friend]friend bool运算符<(const tree&;tree1,const tree&;tree2);
e:\technion\mivnei\hw1\tree.h:75:68:注意:(如果这不是您想要的,请确保已经声明了函数模板,并在这里的函数名后面添加<>)
E:\technion\mivnei\hw1\tree.h:76:69:警告:友元声明“bool operator==(const tree&;,const tree&;)”声明一个非模板函数[-wnon-template-friend]friend bool运算符==(const tree&tree1,const tree&tree2);
有谁知道哪里出了问题或者怎么解决吗?(这不是关于代码正确性的问题,而是重载运算符所需的语法问题)
您需要在类中定义非模板函数
template <class T>
class tree {
// ...
friend bool operator<(const tree<T>& tree1,const tree<T>& tree2){
return tree1.get_root()->data<tree2.get_root()->data; //assuming < operator
}
};
或者声明friend函数模板:
template <class T> class tree;
template <class T> bool operator<(const tree<T>& tree1,const tree<T>& tree2);
template <class T>
class tree {
// ...
// Declare specialization friend
friend bool operator< <T>(const tree<T>& tree1,const tree<T>& tree2);
};
template <class T> bool operator<(const tree<T>& tree1,const tree<T>& tree2)
{
return tree1.get_root()->data<tree2.get_root()->data; //assuming < operator
}
在下面的代码中,是一个模板类,取决于非类型参数。为和定义了friend。还依赖于另一个bool模板参数。 在Coliru上看现场直播。 现在,我想给出的模板参数的默认值,例如,以便以下语句 相当于 如果我在 同样,它不编译给出错误 main.cpp:27:15:错误:重新声明friend'template std::ostream&operator<<(std::ostream&,const a&
我有一个模板类包含其他类的优先级队列,我需要使用优先级重载器调用各个类重载器,根据各个类的偏好进行比较(在这种情况下是年龄,在另一个类中可能是价格。 我绝对相信我已经实现了不正确的运算符重载,因此非常感谢您的建议。 举个例子 我得到这个错误,我不知道我需要做什么来修复它。我必须将类重载保持为单个变量(Animal) 任务cpp:在“布尔运算符”的实例化中
我对这个错误有意见 错误LNK2019未解析的外部符号"类std::basic_ostream 现在,< code>post所做的就是调用< code >操作符 宣言 定义 它们分别位于文件和中,我要求运算符不是成员函数(用于赋值)。
我在运算符过载时遇到问题 主要是我有 其中<code>Integer</code>只是<code>int</code>的包装,带有我需要的一些特殊功能。 然而,当我编译上面的代码时,我得到了错误C2679,它表示<code>binary' 我还试图删除友元声明中的参数,因此代码变成了: 但这会产生另一个错误:C2785:
问题内容: 如何使用AngularJS(在模板中)进行三元运算? 最好在html属性中使用一些属性(类和样式),而不是创建和调用控制器的函数。 问题答案: 更新 :Angular 1.1.5添加了一个三元运算符,因此现在我们可以简单地编写 如果使用的是较早版本的Angular,则有两个选择: 上面的项目2创建具有两个属性的对象。数组语法用于选择名称为true的属性或名称为false的属性,并返回关
为什么这段代码会给我一个链接器错误以及如何修复它? 体系结构x86_64的未定义符号:" operator==(foo const
在本章中,我们将研究如何在Joomla中create a template 。 创建模板 以下是在Joomla中创建模板的简单步骤 - Step (1) - 在Joomla → Templates文件夹中创建一个名为MyFirstTemplate文件夹。 在MyFirstTemplate文件夹中,再创建2个名为images和CSS的文件夹,以保存所有图像和CSS文件。 Step (2) −在MyF