使用Qt Creator时出错:"多重定义" "首先在这里定义"

时间:2017-12-27 22:13:28

标签: c++ qt multiple-definition-error

我有问题。在我的Qt项目中,我遇到了错误。 Tt说:

  

estructura的多重定义

我认为这是因为我使用了太多" #include",但我不知道如何修复它。

这是我的计划:

Struct.h

 #ifndef STRUCT_H
    #define STRUCT_H

    #include <stdio.h>
    #include <string>

    struct Circulo{
        std::string nombre;
        int capacidad;
        int statusMujer[4];
        int hijos[4];
    };

    struct Circulo estructura[30];

    #endif // STRUCT_H

Logica.h

 #ifndef LOGICA_H
 #define LOGICA_H
#include <iostream>
void madresStatusCodificados(std::string , int , int[]);
void ListadoDeCirculos(int, int , std::string []);
std::string CirculoMayorCapacidad(int );
int NinnosEnCirculosconStatus(int , int );
void Listado(int);
#endif // LOGICA_H

interfaz.cpp

#include <Interfaz/Interfaz.h>
#include <Logica/Defecto.h>
#include <Interfaz/Menu.h>
#include <Logica/Struct.h>
#include <iostream>
using namespace std;
 void Principal(){
                  cin>>estructura[i].statusMujer[3];
                  cout<<"Escriba la cantidad de hijos con madres desconocidas"<<endl;
                  cin>>estructura[i].hijos[3];
                  i++;
              }else{
                  break;
              }
 }
}

Logica.cpp

#include <iostream>
using namespace std;
//#include <Logica/Logica.h>
#include <Logica/Struct.h>

void madresStatusCodificados(string t,  int h , int k[]){
for(int i=0;i<h;i++){
    if(estructura[i].nombre==t){
       k[0]=estructura[i].statusMujer[0];
       k[1]=estructura[i].statusMujer[1];
       k[2]=estructura[i].statusMujer[2];
       k[3]=estructura[i].statusMujer[3];
    }
   }
}

void ListadoDeCirculos(int g,int u,string h[]){

    for(int i=0;i<u;i++){
        if(estructura[i].statusMujer[g-1]!=0)
        h[i]=estructura[i].nombre;
    }
    }


string CirculoMayorCapacidad(int k){
    int n=-1;
    string l;
    for(int i=0;i<k;i++){
        if(estructura[i].capacidad>n){
            n=estructura[i].capacidad;
            l=estructura[i].nombre;
        }
    }
    return l;

}

int NinnosEnCirculosconStatus(int a,int b){
    int h=0;
for(int i=0;i<b;i++){

    h=h+estructura[i].hijos[a-1];
}

return h;
}


void Listado(int y){
    for(int i=0;i<y;i++){
        cout<<"NOMBRE DEL CIRCULO    CAPACIDAD  Madres solteras Madres trabajadoras Madres caso social Madres desconocidas  "<<endl;
       cout<<estructura[i].nombre<<""<<estructura[i].capacidad<<estructura[i].statusMujer[0]<<estructura[i].statusMujer[1]<<estructura[i].statusMujer[2]<<estructura[i].statusMujer[3]<<endl;
    }
}

我收到此错误: Errors

2 个答案:

答案 0 :(得分:1)

你已经在几个文件中定义了一个名为“estructura”的变量,错误告诉你它首先在Struct.h中定义,在Logica.cpp中被称为#included,

struct Circulo estructura[30];

你有另一个定义Defecto.h文件或Defecto.h包含的文件

答案 1 :(得分:1)

estructura的定义移到您选择的cpp文件中,然后在需要的地方将其声明为extern。您可以在c ++中省略struct关键字。

在struct.cpp文件中:

#include "Struct.h"

Circulo estructura[30];

在Logica.cpp和Interfaz.cpp文件中:

#include "Struct.h"

extern Circulo estructura[30];

Here是对您的问题的详尽解释。