我正在制作Avl树项目,但得到2个构建错误,即
error LNK1169: one or more multiply defined symbols found error LNK2005: "struct avl_node * root" (?root@@3PAUavl_node@@A) already defined in AVL.obj
这是我的代码:
#include "AVL.h" int main() { AVL obj; char pn[30],fn[30],add[20],di[15],dn[30]; int id,age,nic; int ch; cout<<"Want To Build BST On Basis Of:"<>ch; switch(ch) { case 1: do{ cout<<"Patients Database"< >ch; switch(ch) { case 1: cout<<"Enter Patient ID:"; cin>>id; cin.clear(); cin.ignore(); cout<<"Enter Patient Name:"; gets(pn); cout<<"Enter Father Name:"; gets(fn); cout<<"Enter Patient's Age:"; cin>>age; cout<<"Enter Patient NIC:"; cin>>nic; cin.clear(); cin.ignore(); cout<<"Enter Address:"; gets(add); cout<<"Enter Disease:"; gets(di); cout<<"Enter Doctor Name:"; gets(dn); root=obj.adddatanic(root,id,pn,fn,age,nic,add,di,dn); break; case 2: obj.searchbynic(); break; case 3: break; case 4: cout<<"Show Record:-"< >ch; switch(ch) { case 1: obj.showgreatestnic(); break; case 2: obj.showleastnic(); break; case 3: obj.showascendingnic(); break; case 4: obj.showdescendingnic(); break; } break; case 5: exit(-1); default: cout<<"Wrong Entry"< >ch; switch(ch) { case 1: cout<<"Enter Patient ID:"; cin>>id; cin.clear(); cin.ignore(); cout<<"Enter Patient Name:"; gets(pn); cout<<"Enter Father Name:"; gets(fn); cout<<"Enter Patient's Age:"; cin>>age; cout<<"Enter Patient NIC:"; cin>>nic; cin.clear(); cin.ignore(); cout<<"Enter Address:"; gets(add); cout<<"Enter Disease:"; gets(di); cout<<"Enter Doctor Name:"; gets(dn); root=obj.adddataid(root,id,pn,fn,age,nic,add,di,dn); break; case 2: obj.searchbyid(); break; case 3: break; case 4: cout<<"Show Record:-"< >ch; switch(ch) { case 1: obj.showgreatestid(); break; case 2: obj.showleastid(); break; case 3: obj.showascendingid(); break; case 4: obj.showdescendingid(); break; } break; case 5: exit(-1); default: cout<<"Wrong Entry"< 这是我的AVL.h文件.
#include#include #include #include #include #include #define pow2(n) (1 << (n) using namespace std; struct avl_node { avl_node* left; avl_node* right; char pname[30]; //Patient Name char fname[30]; //Father Name int age; int nic; char address[20]; char disease[15]; char dname[30]; //Doctor Name int p_id; //Pateint Id }*root; class AVL { public: AVL(); int height(avl_node*); int diff(avl_node*); avl_node* r_rotation(avl_node*); //Right Rotation avl_node* l_rotation(avl_node*); //Left Rotation avl_node* lr_rotation(avl_node*); //Left-Right Rotation avl_node* rl_rotation(avl_node*); //Right-Left Rotation avl_node* balance(avl_node*); //Functions For NIC Key avl_node* getdatanic(avl_node*,int,char[],char[],int,int,char[],char[],char[]); avl_node* adddatanic(avl_node*,int,char[],char[],int,int,char[],char[],char[]); void searchbynic(); void showgreatestnic(); void showleastnic(); void showascendingnic(); void ascendingnic(avl_node*); void showdescendingnic(); void descendingnic(avl_node*); //Functions For ID Key avl_node* getdataid(avl_node*,int,char[],char[],int,int,char[],char[],char[]); avl_node* adddataid(avl_node*,int,char[],char[],int,int,char[],char[],char[]); void searchbyid(); void showgreatestid(); void showleastid(); void showascendingid(); void ascendingid(avl_node*); void showdescendingid(); void descendingid(avl_node*); void delete_all(avl_node*); ~AVL(); };
Jonathan Lef.. 5
最有可能的是,你已经
root
在AVL.h
标题中定义了 - 而不是声明 - 并且你有多个文件包含AVL.h
标题(如果只有一个文件包含它,那么有一个标题没什么意义),所以你有变量root
乘法定义.你写的机率很大:
avl_node *root;(可能包括一个初始化程序
= 0
)而不是正确的:extern avl_node *root;在头文件中.修复是双重的:
extern
在标题中包含(并确保没有初始值设定项).
avl_node *root;
在适当的源文件中定义(可能AVL.cpp
,或者您用于C++源代码的任何扩展名).
您的标题包含:
struct avl_node { avl_node* left; avl_node* right; char pname[30]; //Patient Name char fname[30]; //Father Name int age; int nic; char address[20]; char disease[15]; char dname[30]; //Doctor Name int p_id; //Patient Id } *root;它需要包含:
struct avl_node { avl_node* left; avl_node* right; char pname[30]; //Patient Name char fname[30]; //Father Name int age; int nic; char address[20]; char disease[15]; char dname[30]; //Doctor Name int p_id; //Patient Id }; extern avl_node *root;AVL.cpp中的代码需要额外的行:
avl_node *root = 0;一切都需要重新编译.
(我们将
struct
vs 的设计选择留给class
另一天.)
最有可能的是,你已经root
在AVL.h
标题中定义了 - 而不是声明 - 并且你有多个文件包含AVL.h
标题(如果只有一个文件包含它,那么有一个标题没什么意义),所以你有变量root
乘法定义.
你写的机率很大:
avl_node *root;
(可能包括一个初始化程序= 0
)而不是正确的:
extern avl_node *root;
在头文件中.修复是双重的:
extern
在标题中包含(并确保没有初始值设定项).
avl_node *root;
在适当的源文件中定义(可能AVL.cpp
,或者您用于C++源代码的任何扩展名).
您的标题包含:
struct avl_node { avl_node* left; avl_node* right; char pname[30]; //Patient Name char fname[30]; //Father Name int age; int nic; char address[20]; char disease[15]; char dname[30]; //Doctor Name int p_id; //Patient Id } *root;
它需要包含:
struct avl_node { avl_node* left; avl_node* right; char pname[30]; //Patient Name char fname[30]; //Father Name int age; int nic; char address[20]; char disease[15]; char dname[30]; //Doctor Name int p_id; //Patient Id }; extern avl_node *root;
AVL.cpp中的代码需要额外的行:
avl_node *root = 0;
一切都需要重新编译.
(我们将struct
vs 的设计选择留给class
另一天.)