错误:定义两个带有头文件的类时重新定义类

时间:2019-07-02 02:58:05

标签: c++

我正在尝试运行一个教程。在其中定义了两个类,其中包含两个.h文件和两个.cpp文件。代码如下。我不知道为什么会给我错误?

班级生日可以正常工作,但是当我添加班级People并在People班级中使用Birthday时,它给了我错误。 我从一些重新定义错误的帖子中仔细检查了一些内容,例如包括guard等,这些在我的代码中都可以。 我正在使用这些行在Visual Studio代码中编译和运行代码。

g++ -c People.cpp -o People.o
g++ -c Birthday.cpp -o Birthday.o
g++ -c main.cpp -o main.o
g++  main.o Birthday.o -o prog
./prog

#ifndef BIRTHDAY_H
#define BITHDAY_H
using namespace std;
class Birthday
{
    public:
    Birthday(int d, int m, int y );
    void printdate();
    private:
    int day;
    int month;
    int year;

};
#endif

#include "Birthday.h"
#include <iostream>
using namespace std;

Birthday::Birthday(int m, int d, int y)
{
    day = d;
    month = m;
    year = y;
}
void Birthday:: printdate()
{
    cout << day <<"/" << month << "/" << year <<endl; 
}

#ifndef PEOPLE_H
#define PEOPLE_H
#include "Birthday.h"
#include <string>
using namespace std;
class People
{
public:
    People(string x, Birthday bo);
    void printinfo();
private:
    string name;
    Birthday dateofbirth;
};
#endif

#include "People.h"
#include <iostream>
#include "Birthday.h"
using namespace std;

People::People(string x, Birthday bo)
:
name  (x),
dateofbirth(bo)
{
}
void People::printinfo()
{
    cout << name << "was born on " <<endl;
    cout <<  "Birthday is :";
    dateofbirth.printdate();
}

#include <iostream>
#include "Birthday.h"
#include "People.h"
using namespace std;

int main()
{
    Birthday birthobj(12,5,1995);
    birthobj.printdate();
    People Peoplename("Muhammad Adil", birthobj);
    Peoplename.printinfo();
}

3 个答案:

答案 0 :(得分:0)

您没有正确定义标题保护。

#ifndef BIRTHDAY_H
#define BITHDAY_H

应该是

#ifndef BIRTHDAY_H
#define BIRTHDAY_H

答案 1 :(得分:0)

使用#pragma once会更好,因为它可以避免这样的错别字。

答案 2 :(得分:0)

Header Guards是解决您提到的重新定义问题的必需条件。

Header Guards - Source File Inclusion

您的Birthday类头文件应位于Header Guard中,如下所示:

#ifndef BIRTHDAY_H
#define BIRTHDAY_H
using namespace std;
class Birthday
{
    public:
       Birthday(int d, int m, int y );
       void printdate();
    private:
       int day;
       int month;
       int year;

 };
 #endif

如上面的代码所示:

错误的行#define BITHDAY_H更改为#define BIRTHDAY_H

因此,除了上面的错字错误外,看来其他所有代码都正确。

希望对您有帮助!