C++ 请参见声明行的not声明错误

C++ 请参见声明行的not声明错误,c++,pointers,recursion,tree,structure,C++,Pointers,Recursion,Tree,Structure,我得到编译器错误“rightTree尚未声明”正好在我声明rightTree的行上 另外,当我在上面声明树时,它会说“树不命名类型” leftTree的情况也一样 代码: 提前感谢您的帮助 我已经编写了一个代码,用于从O(logn)中的数组构建分段树 我无法调试此错误。 我在网络中查找它,它说要在上面声明树和节点,但这也不起作用 此外,在写入节点时*节点=新节点;显示无错误。代码>树*合并树(节点**节点,树*树,整数开始,整数结束) 您必须重命名第二个参数。参数的名称隐藏了类型的名称。问题在于

我得到编译器错误“rightTree尚未声明”正好在我声明rightTree的行上

另外,当我在上面声明树时,它会说“树不命名类型”

leftTree的情况也一样

代码:

提前感谢您的帮助

我已经编写了一个代码,用于从O(logn)中的数组构建分段树 我无法调试此错误。 我在网络中查找它,它说要在上面声明树和节点,但这也不起作用

此外,在写入节点时*节点=新节点;显示无错误。

代码>树*合并树(节点**节点,树*树,整数开始,整数结束)


您必须重命名第二个参数。参数的名称隐藏了类型的名称。

问题在于,在方法
mergeTree
中,名称
Tree
指的是第二个变量
Tree*Tree
,而不是类型
Tree
(变量名称隐藏了类型名称)


更改为
Tree*Tree
(小写)以修复它。

在函数声明中,第二个参数的名称隐藏结构
Tree
的名称

Tree* mergeTree(Node** nodes,Tree* Tree,int start,int end){
                             ^^^^^^^^^^
因此,她重命名参数或使用结构
树的详细类型名称,例如

struct Tree* rightTree = new struct Tree;

In认为可变长度数组不是C++的标准特征。所以一般来说,这个代码

int n;
cin>>n;
int a[n],i=0;
这是无效的

此外,主存储器中存在内存泄漏

int main() {
    Tree* segmentTree=new Tree;
    // ...
    segmentTree=segmentTree_form(a,n);

    //..
    return 0;
}
首先,动态分配内存,并将其地址分配给指针
segmentTree
,然后覆盖该指针。因此,分配的内存不会被释放

您应该使用new操作符而不是malloc。所以这个代码片段

Tree* segmentTree_form(int a[],int n){
    int i=0;
    Node** nodes=(Node**)malloc(n*sizeof(Node*));

没有意义。

以前还有其他错误吗?
int main() {
    Tree* segmentTree=new Tree;
    // ...
    segmentTree=segmentTree_form(a,n);

    //..
    return 0;
}
Tree* segmentTree_form(int a[],int n){
    int i=0;
    Node** nodes=(Node**)malloc(n*sizeof(Node*));