C++ 模板代码与计数器部件的行为不同
在main.cpp中,我尝试使用操作符重载将元素添加到树中。 而在原始的非运算符重载版本中,将元素添加到 在这个版本中,在树中添加第二个元素40时失败 结构使我很困惑。我用双指针避免C++中的拷贝。 这应该和以前一样好用。请帮我找出问题所在C++ 模板代码与计数器部件的行为不同,c++,templates,C++,Templates,在main.cpp中,我尝试使用操作符重载将元素添加到树中。 而在原始的非运算符重载版本中,将元素添加到 在这个版本中,在树中添加第二个元素40时失败 结构使我很困惑。我用双指针避免C++中的拷贝。 这应该和以前一样好用。请帮我找出问题所在 #include <iostream> #include "Tree.hpp" using namespace std; int main() { Tree<TreeNode> tree; tree + 50 + 40
#include <iostream>
#include "Tree.hpp"
using namespace std;
int main()
{
Tree<TreeNode> tree;
tree + 50 + 40 + 20 + 45 + 10 + 25;
cout << tree.search(40)->data << endl;
return 0;
}
#包括
#包括“Tree.hpp”
使用名称空间std;
int main()
{
树木;
树木+50+40+20+45+10+25;
cout data ancester=ancester;
返回0;
}
如果(数据>(*开始)->数据){
insertNode(&(*start)->LeftChild,data,*start);
}
如果(数据)
insertNode(&(*start)->RightChild,data,*start);
}
以下是问题树和功能树:
@编译器不允许更改程序的可观察行为。它违反了“好像”规则。无论您的代码为什么不工作。我觉得这是一种“不是因为你可以,所以你应该”的情况。有一个
操作符+()
的行为与操作符+=()
通常的行为方式类似,这似乎是一个意外和灾难的处方。@arnes在关联性方面,是的。遍历操作符会产生与按顺序调用InsertNode完全相同的代码:。可能有些事情你没有告诉我们。@arnes:
Tree<T>& Tree<T>::operator+(int data) {
insertNode(&root, data, nullptr);
return *this;
}
template<typename T>
int Tree<T>::insertNode(T **start,int data,T* ancester){
if((*start)==nullptr){
*start=new T(data);
(*start)->ancester=ancester;
return 0;
}
if(data>(*start)->data){
insertNode(&(*start)->LeftChild,data,*start);
}
if(data<(*start)->data)
insertNode(&(*start)->RightChild,data,*start);
}