错误LNK1169:找到一个或多个多重定义的符号

 涿州雨嫣舞蹈培训中心_144 发布于 2023-02-08 12:37

我正在制作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

最有可能的是,你已经rootAVL.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;

一切都需要重新编译.

(我们将structvs 的设计选择留给class另一天.)

1 个回答
  • 最有可能的是,你已经rootAVL.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;
    

    一切都需要重新编译.

    (我们将structvs 的设计选择留给class另一天.)

    2023-02-08 12:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有