Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++ 获得;预期的‘;)’;在‘之前&’;代币;在BST构造函数签名的链表上_C++ - Fatal编程技术网

C++ 获得;预期的‘;)’;在‘之前&’;代币;在BST构造函数签名的链表上

C++ 获得;预期的‘;)’;在‘之前&’;代币;在BST构造函数签名的链表上,c++,C++,对于我的家庭作业,我有一些标题文件(由我的讲师提供)和一些问题。目标-从处理BST和链表的头文件中实现方法(从列表中构建树、从树中构建列表和其他一些方法) 问题:从标头的签名中获取一些错误,包括: 错误:在“&”标记之前应为“') btree(LinkedList&list); *我不知道为什么 错误:“LinkedList”未命名类型 b树和运算符=(常量链接列表和ls); *虽然我已经在这个文件中包含了链表标题 错误:“LinkedList”未命名类型 LinkedList*Tree2li

对于我的家庭作业,我有一些标题文件(由我的讲师提供)和一些问题。目标-从处理BST和链表的头文件中实现方法(从列表中构建树、从树中构建列表和其他一些方法)

问题:从标头的签名中获取一些错误,包括:

错误:在“&”标记之前应为“') btree(LinkedList&list); *我不知道为什么

错误:“LinkedList”未命名类型 b树和运算符=(常量链接列表和ls); *虽然我已经在这个文件中包含了链表标题

  • 错误:“LinkedList”未命名类型 LinkedList*Tree2linkListbyDepth()
编辑: 我删除了包括frind LinkedList行在内的圆圈,并将类btree和结构节点添加到LinkedList.h。 我还添加了cpp文件。 请忽略cpp文件中的错误。我知道他们有一些错误。我不是想让你们帮我解决这个问题。我只想修复标题错误,这样我就可以开始在cpp文件上实现这些方法,测试它们并在执行过程中学习cpp。(这是我的第一个cpp作业)

B树h:

\ifndef\u btree\H
#定义树
#包括
使用名称空间std;
结构节点
{
int key_值;
节点*左;
节点*右;
};
B类树
{
朋友类链接列表;
节点*根;
公众:
//默认构造函数
b树();
~b树();
//按列表复制构造函数
btree(LinkedList&list);
//按树复制构造函数
btree(btree&bt);
//链表中的赋值运算符
b树和运算符=(常量链接列表和ls);
//树中的赋值运算符
btree和操作符=(常量btree和bt);
//向二叉树插入新值
无效插入(int键);
//照照这棵树
空镜();
LinkedList*Tree2linkListbyDepth();
int getTreeDepth();
//打印树(按顺序)
friend ostream&operatordata);
温度=温度->下一步;
}
}
node*newNode(int键){//创建一个新节点
node*temp=new node;//检查是否需要新节点
温度->键值=键;
临时->左=临时->右=空;
返回温度;
}
节点*插入(节点*节点,int键){//需要修复
//如果树为空,则返回一个新节点
if(node==NULL)
返回newNode(key);
/*否则,将从树上再次出现*/
if(键<节点->键\u值)
节点->左=插入(节点->左,键);
否则如果(键>节点->键值)
节点->右侧=插入(节点->右侧,键);
/*返回(未更改的)节点指针*/
返回节点;
}
btree::~btree(){//检查!
}
按顺序无效(节点*根){//检查
if(root!=NULL){
顺序(根->左);
printf(“%d\n”,根->键值);
顺序(根->右);
}
}
//将根传递给打印函数
ostream&Operator左,列表);
列表->头部->下一步=新节点;
列表->标题=列表->标题->下一步;
顺序(根->右,列表);
}
}
LinkedList::LinkedList(){
头=新节点;
head->next==NULL;
}
LinkedList::~LinkedList()
{
删除标题;
}

显然,您的代码之前没有声明
LinkedList

btree(LinkedList &list);
名称查找无法找到该名称。因此出现了错误

你在上面的朋友声明

friend class LinkedList;
不会将
LinkedList
作为常规名称查找可见的名称引入

我看到您包括了
LinkedList.h
。里面有什么?您是否在该头文件中声明了
LinkedList
?如果是这样的话,那么它可能会遇到循环包含问题。如果看不到
LinkedList.h
的内容,就无法说话


现在,当您发布
LinkedList.h
时,很明显您有循环包含。这就是你犯错误的原因。你必须去掉圆形夹杂。删除其中一个构成循环包含的
#include
指令,改为向前声明相应的类

例如:

  • LinkedList.h
  • 而是添加前向声明

    struct node;
    class btree;
    
    LinkedList.h

  • 添加
    #将“btree.h”
    包括到
    LinkedList.cpp


LinkedList
声明为
LinkedList
的朋友是毫无意义的。

btree(LinkedList&list)尝试为参数使用其他名称。因为
使用名称空间std它可能看到了
std::list
类。您的
LinkedList.h“
中有什么?发布内容,包括那里的
#include
指令。只是尝试了列表参数的不同名称,仍然得到相同的错误。我正在编辑并添加第二个头文件。在类
btree
之前删除链表头并声明前向decl编译很好,因此您可能有一个循环包含或包含保护重复。不相关的,特别是在头文件中。而且该实现保留了以两个下划线或一个下划线后跟大写字母开头的标识符,因此虽然
\u btree\u H
是可行的,但要避免使用
\u List\u cpp
(标题栏本身的一个奇数名称)。我猜您有循环包含循环包含,第一次发生在您身上时,您会感到非常困惑。只需添加第二个头文件我从Linkedlist头中删除了包含项,并添加了转发声明:class btree,现在对于使用“node”的每一行,我都有不同类型的错误。例如:错误:“节点”未按顺序声明为LinkedList(节点*bt,LinkedList*head);我不断得到有线错误:错误:在“&”标记btree(LinkedList&list)之前预期“)”@Liran:struct节点的前向声明LinkedList.h
中的code>。至于其余的。。。没有办法说那里发生了什么
#include "LinkedList.h"
#include "btree.h"
#include <iostream>

LinkedList::LinkedList(btree & bt) {
    LinkedList *list = new LinkedList;
    inOrder(bt.root, list);

}

Node inOrder(node *root, LinkedList *list) { // CHECK
    if (root->key_value != NULL) {
        inOrder(root->left, list);
        list->head->next = new Node;
        list->head = list->head->next;
        inOrder(root->right, list);
    }
}

LinkedList::LinkedList() {
head = new Node;
    head->next == NULL;
}

LinkedList::~LinkedList()
{
    delete head;
}
btree(LinkedList &list);
friend class LinkedList;
struct node;
class btree;