我正在尝试运行一个教程。在其中定义了两个类,其中包含两个.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();
}
答案 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
因此,除了上面的错字错误外,看来其他所有代码都正确。
希望对您有帮助!