在一个文件中,我包含了同一个类的两个子类。由于每个子类都导入基类的头文件,因此会导入两次基类,并导致错误:
build/classes/Market.h:8:7: error: redefinition of 'Market'
class Market {
^
build/classes/Market.h:8:7: note: previous definition is here
class Market {
我在Market
中有一个基类Market.h
:
class Market {
public:
// ...
private:
// ...
};
类CerealMarket
和CheeseMarket
是此类的子类:
在CerealMarket.h
:
#include "Market.h"
class CerealMarket: public Market {
public:
// ...
private:
// ...
};
在CheeseMarket.h
:
#include "Market.h"
class CheeseMarket: public Market {
public:
// ...
private:
// ...
};
最后,有一个类CommodityExchange
,它存储CerealMarket
的一个实例和CheeseMarket
的一个实例:
#include "CerealMarket.h"
#include "CheeseMarket.h"
class CommodityExchange {
public:
// ...
private:
const CheeseMarket cheeseMarket;
const CerealMarket cerealMarket;
};
但是,此#include
s Market.h
两次。是否有可能拥有这种类继承结构而不让编译器认为Market
有重复的定义?
我正在使用以下命令构建:
g++ -Wall -Werror -pedantic -O1 main.cpp CommodityExchange.cpp Market.cpp CerealMarket.cpp CheeseMarket.cpp
答案 0 :(得分:0)
你需要包括警卫:
#ifndef MARKET_H
#define MARKET_H
// your code
#endif
这些可以防止编译器包含两个文件。
答案 1 :(得分:0)
在Market.h
中,只需将#pragma once
放在文件的最顶部即可。
或者你也可以使用警卫:
#ifndef MARKET_H
#define MARKET_H
/* your class declaration */
#endif // MARKET_H
这是通常的做法,以避免在C ++中双重包含标头。