结构体的重新定义错误.头文件的问题

Redefinition of struct tm errror. Issues with headers

本文关键字:错误 问题 文件 新定义 结构体 定义      更新时间:2023-10-16

错误:||=== = Build: Debug in Davis_project1 (compiler: GNU GCC compiler) ===|

c:mingwincludetime.h|172|error: redefinition of 'struct tm'|

c:mingwincludewchar.h|87|错误:先前定义的'struct tm'|

| | = = =构建失败:2错误(s), 0警告(s)(0分钟(s), 0秒(s)) = = = |

我的程序运行得很好,直到我试图为一个srand函数添加ctime头文件。从那时起,我得到了'结构tm'的重新定义和'结构tm'错误的先前定义。互联网告诉我这是一个标题问题。下面是我所有的header和cpp。任何建议,感谢。下面是我的主要cpp。我认为问题就在这里

#include <iostream>
#include <string>
#include "Club.h"
#include <ctime>
using namespace std;
int main(){
Club Club1;
Club1.displayMenu();
Club1.processInput();
}

Cbros头

#ifndef CBROS_H
#define CBROS_H
#include <iostream>
class Cbros
{
public:
    Cbros();
    //default constructor
    Cbros(std::string , int , double );
    std::string getName()const;
    int getAge ()const;
    int getStr()const;
    int getCharm()const;
    int getIntel()const;
    int getHeight ()const;
    void setName(std::string);
    void setAge(int);
    void setHeight(int);
    void setIntel(int);
    void setStr(int);
    void setCharm(int);
    void MeetGirl(int, int, int);
    void GirlChance(int, int, int);




   class Wallet{
public:
    double addMoney(double amount);//Adds  Money to wallet
    double removeMoney(double amount);//removes money from wallet
    int countMoney();//displays money in wallet
protected:
    int money;
};
Wallet Mywallet;

protected:
    std::string newName;
    std::string newRace;
    int newAge;
    double newHeight;
    int newStr;
    int newInt;
    int newCharm;


private:
};

#endif // CBROS

Cbros cpp

#include "Cbros.h"

Cbros::Cbros()
{
}
Cbros::Cbros(std::string name ,int age , double height )
:newName(name),newAge(age),newHeight(height)
{
}
std::string Cbros::getName() const{
return newName;
}
int Cbros::getAge() const{
return newAge;
}
int Cbros::getHeight() const{
return newHeight;
}
int Cbros::getIntel() const{
return newInt;
}
int Cbros::getCharm() const{
return newCharm;
}
int Cbros::getStr() const{
return newStr;
}
void Cbros::setName(std::string name){
newName=name;
}

void Cbros::setAge(int age){
newAge=age;
}
void Cbros::setHeight(int height){
newHeight=height;
}
void Cbros::setCharm(int charm){
newCharm=charm;
}
void Cbros::setIntel(int intel) {
newInt=intel;
}
void Cbros::setStr(int str){
newStr=str;
}
double Cbros::Wallet::addMoney(double amount){if ( amount < 0 )
    return 0;
money += amount;
return amount;
}
double Cbros::Wallet::removeMoney(double amount) {
if ( ( amount < 0 ) || ( money < amount ) )
    return 0;
money -= amount;
return amount;
}
int Cbros::Wallet::countMoney() {
return money;
}
void Cbros::MeetGirl(int newStr, int newCharm, int newInt){
if (newHeight>=60){
    std::cout<<"Mmmm I like my men tall, Hi, I'm Brittany";
}
}
void Cbros::GirlChance(int newStr, int newCharm, int newInt){
}

俱乐部头

#ifndef CLUB_H
#define CLUB_H
#include "Cbros.h"

class Club: public Cbros
{
public:
    Club();
    int displayMenu();
    void processInput();
    int menuSelection;

protected:

private:

};
#endif // CLUB_H
俱乐部cpp

class Cbros;
class Jock;
class Artsy;
class Engineering;
#include "Club.h"


Club::Club()
{}

int Club::displayMenu(){
std::cout<<"Welcome Meet a Girl Game!"<<std::endl;
std::cout<<"The goal is to use your inherent skills to earn a girl's phone    numbernn";
std::cout<<"Please enter the number of your choice:nn";
std::cout<<"1. Go the Clubn";
std::cout<<"2. Stay at Homen";
std::cin>>menuSelection;
return menuSelection;


}
void Club::processInput(){
while (menuSelection!=1&&menuSelection!=2){
    std::cout<<"invalid choicen"<<displayMenu();
}
if (menuSelection==1){
    std::cout<<"Are you an";
    std::cout<<"1. Engineer Bro?n";
    std::cout<<"2. Artsy Bro?n";
    std::cout<<"3. Jock Bro?n";
    std::cin>>menuSelection;
    switch(menuSelection){
case 1:{
    std::cout<<"Welcome Engineer Bron";
    std::cout<<"Please enter your name:";
    std::cin.ignore();
    std::getline(std::cin, newName);
    std::cout<<"Please enter your Height(in inches):";
    std::cin>>newHeight;
    std::cout<<"Please enter your Age:";
    std::cin>>newAge;
    Cbros Engine(newName, newAge, newHeight);
    Engine.setCharm(3);
    Engine.setStr(3);
    Engine.setIntel(6);
    std::cout<<std::string(20,'n');

    std::cout<<"Class: Engineern";
    std::cout<<"Name: "<<Engine.getName()<<std::endl;
    std::cout<<"Height: "<<Engine.getHeight()<<std::endl;
    std::cout<<"Age "<<Engine.getAge()<<std::endl;
    std::cout<<"Initial Stats"<<std::endl;
    std::cout<<"Charm: "<<Engine.getCharm()<<std::endl;
    std::cout<<"Strength: "<<Engine.getStr()<<std::endl;
    std::cout<<"Intelligence: "<<Engine.getIntel() <<std::endl<<std::endl<<std::endl<<std::endl;
    std::cout<<"Welcome to Club CSC 1310n";
    std::cout<<"No time to waste lets meet some girls!n";
    std::cout<<"Hmmm I think I see someone they may be your type over there";
    Engine.MeetGirl(3,3,6);


    break;
    }
case 2:{
    std::cout<<"Welcome Artsy Bro!n";
    std::cout<<"Please enter your name:";
    std::cin.ignore();
    std::getline(std::cin, newName);
    std::cout<<"Please enter your Height(in inches):";
    std::cin>>newHeight;
    std::cout<<"Please enter your Age:";
    std::cin>>newAge;
    Cbros Artsy(newName, newAge, newHeight);
    Artsy.setCharm(6);
    Artsy.setStr(3);
    Artsy.setIntel(3);
    std::cout<<"Artsy Bro's Name: "<<Artsy.getName()<<std::endl;
    std::cout<<"Height: "<<Artsy.getHeight()<<std::endl;
    std::cout<<"Age "<<Artsy.getAge()<<std::endl;
    std::cout<<"Initial Stats"<<std::endl;
    std::cout<<"Charm: "<<Artsy.getCharm()<<std::endl;
    std::cout<<"Strength: "<<Artsy.getStr()<<std::endl;
    std::cout<<"Intelligence: "<<Artsy.getIntel()<<std::endl;
    break;
    }
case 3: {
    std::cout<<"Welcome Jock Bro!n";
    std::cout<<"Please enter your name:";
    std::cin.ignore();
    std::getline(std::cin, newName);
    std::cout<<"Please enter your Height(in inches):";
    std::cin>>newHeight;
    std::cout<<"Please enter your Age:";
    std::cin>>newAge;
    Cbros Jock(newName, newAge, newHeight);
    Jock.setCharm(3);
    Jock.setStr(6);
    Jock.setIntel(3);
    std::cout<<"Jock Bro's Name: "<<Jock.getName()<<std::endl;
    std::cout<<"Height: "<<Jock.getHeight()<<std::endl;
    std::cout<<"Age "<<Jock.getAge()<<std::endl;
    std::cout<<"Initial Stats"<<std::endl;
    std::cout<<"Charm: "<<Jock.getCharm()<<std::endl;
    std::cout<<"Strength: "<<Jock.getStr()<<std::endl;
    std::cout<<"Intelligence: "<<Jock.getIntel()<<std::endl;

    break;
    }
default:

    break;
    }
}
else if(menuSelection==2){
    std::cout<<"Enjoy Netflix Bro";}
}

来自Cbros的其他三个派生类,它们都具有如下所示的相同的。h和。cpp设置。

Jock Header
#ifndef JOCK_H
#define JOCK_H
#include "Cbros.h"

运动员cpp

#include "Jock.h"
jock::Jock()
{
}

工程师头

#ifndef ENGINEERING_H
#define ENGINEERING_H
#include "Cbros.h"
工程师cpp

class Engineering: public Cbros
{
public:
    Engineering();
protected:
private:
};

艺术头

#ifndef ARTSY_H
#define ARTSY_H
#include "Cbros.h"
class Artsy : public Cbros
{
public:
    Artsy();

protected:

private:
};
#endif // ARTSY_H

艺术cpp

#include "Artsy.h"
Artsy::Artsy()
{
}

这是你的编译器的问题,vc++没有这个问题。

结构体tm已经在wchar.h文件中定义(随cstring一起来)。要解决这个错误,可以使用getpid()作为种子。

// Both header-files are necessary for 'getpid()'
#include <sys/types.h>
#include <unistd.h>
srand(getpid());

pid或process -id在程序运行期间不会改变,所以只设置一次种子。