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

Posted

技术标签:

【中文标题】使用 Qt Creator 时出错:“多重定义”“首先在这里定义”【英文标题】:Error using Qt Creator:"multiple definition" "first defined here" 【发布时间】:2017-12-27 22:13:27 【问题描述】:

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

结构的多重定义

我认为是因为我使用了太多“#includes”,但我不知道如何解决。

这是我的程序:

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

【问题讨论】:

idownvotedbecau.se/imageofanexception,并且没有来自您的指针是哪一行导致错误。还有idownvotedbecau.se/nomcve 【参考方案1】:

您已经在多个文件中定义了一个名为“estructura”的变量,错误告诉您它最初是在 Struct.h 中定义的,在 Logica.cpp 中被称为#included,

struct Circulo estructura[30];

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

【讨论】:

【参考方案2】:

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 是对您的问题的详细说明。

【讨论】:

您的意思是,将 estructura 声明放入 .cpp 文件中,并将此声明声明为 extern?提前致谢 已经这样做了,所以,现在,我必须在所有 .cpp 文件中声明 estructura 吗?提前谢谢 我编辑了答案以更好地解释您必须做什么。请阅读我提供的链接中的答案以了解为什么您必须这样做。

以上是关于使用 Qt Creator 时出错:“多重定义”“首先在这里定义”的主要内容,如果未能解决你的问题,请参考以下文章

qt creator的一个项目配置成release编译出错问题

使用 Qt Creator / qmake / MinGw 的预编译标头无法在调试版本中工作

Qt creator 编译错误 :cannot find file .pro qt

Qt creator运行出现moc文件错误求大神解答

在 Mac OS 下使用 Qt-creator 调试时如何进入 Qt 的源代码

qt creator qt5.1 vs2010 使用静态库时链接器错误