C++ 具有多个#include文件的类重新定义错误?(C+;+;)

C++ 具有多个#include文件的类重新定义错误?(C+;+;),c++,header,include,C++,Header,Include,基本上: 汽车和卡车都是从车辆类别派生的 车。h 卡车 #include "Vehicle.h" class Truck : public Vehicle { //blah blah blah Main.cpp #include "Car.h" #include "Truck.h" 我的问题是,当我有#include行时,我在Truck上得到一个类重新定义错误(因为它第二次调用Vehicle),但是当我删除它时,我在{token之前有一个“预期的类名” 我明白了 主->汽车->车辆 主

基本上:

汽车和卡车都是从车辆类别派生的

车。h

卡车

 #include "Vehicle.h"
 class Truck : public Vehicle {
 //blah blah blah
Main.cpp

#include "Car.h"
#include "Truck.h"
我的问题是,当我有#include行时,我在Truck上得到一个类重新定义错误(因为它第二次调用Vehicle),但是当我删除它时,我在{token之前有一个“预期的类名”

我明白了 主->汽车->车辆 主->卡车->车辆(重新定义)

将导致错误


但如果我从卡车上删除#include“Vehicle.h”,也会导致另一个错误,因为它需要一个类名。

正如@ErikW指出的,您需要使用include-guard。请参阅和

例子 福安
正如@ErikW所指出的,您需要使用include-guard。请参阅和

例子 福安
如果您需要在所有头文件中包含标题防护,请尝试使用#ifndef或#pragma。此链接包含更多关于包含防护的详细信息如果您需要在所有头文件中包含标题防护,请尝试使用#ifndef或#pragma。此链接包含更多关于包含防护的详细信息,但使用包含防护时仍会出错。使用包含防护在{token}@user3551329之前显示“预期的类名也许您可以显示更多代码(例如,Vehicle.h),可能您有一个循环包含问题。如果您提供一个。我的车辆头文件中没有包含。并且我的Vehicle.cpp文件只有一个#include Vehicle.h。我将尝试复制它。但使用include guard时仍然会出错。使用include guard时,它会显示“在{token之前预期的类名”@user3551329也许您可以显示更多的代码(例如,Vehicle.h),也许您有一个循环包含问题。如果您提供一个.my Vehicle头文件中没有包含,您将得到最好的帮助。而my Vehicle.cpp文件中只有一个#include Vehicle.h。我将尝试复制它。
#include "Car.h"
#include "Truck.h"
#ifndef FOO_H // This needs to be unique in each header
#define FOO_H

... code goes in here ...

#endif