C ++继承:与成员变量相同的两个子类

时间:2014-11-06 04:52:42

标签: c++ inheritance include

C ++继承和#include冲突

摘要

在一个文件中,我包含了同一个类的两个子类。由于每个子类都导入基类的头文件,因此会导入两次基类,并导致错误:

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:
    // ...
};

CerealMarketCheeseMarket是此类的子类:

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

2 个答案:

答案 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 ++中双重包含标头。