Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板代码与计数器部件的行为不同_C++_Templates - Fatal编程技术网

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

在main.cpp中,我尝试使用操作符重载将元素添加到树中。 而在原始的非运算符重载版本中,将元素添加到 在这个版本中,在树中添加第二个元素40时失败 结构使我很困惑。我用双指针避免C++中的拷贝。 这应该和以前一样好用。请帮我找出问题所在

#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);
    }