C++;继承:作为成员变量的同一类的两个子类 C++继承与包含冲突 总结
在一个文件中,我包含了同一类的两个子类。由于每个子类都会导入基类的头文件,因此会导入它们的基类两次,并导致错误:C++;继承:作为成员变量的同一类的两个子类 C++继承与包含冲突 总结,c++,inheritance,include,C++,Inheritance,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.h中有一个基类,Market: cl
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.h
中有一个基类,Market
:
class Market {
public:
// ...
private:
// ...
};
#include "Market.h"
class CerealMarket: public Market {
public:
// ...
private:
// ...
};
#include "Market.h"
class CheeseMarket: public Market {
public:
// ...
private:
// ...
};
类CerealMarket
和CheeseMarket
是此类的子类:
在CerealMarket.h
中:
class Market {
public:
// ...
private:
// ...
};
#include "Market.h"
class CerealMarket: public Market {
public:
// ...
private:
// ...
};
#include "Market.h"
class CheeseMarket: public Market {
public:
// ...
private:
// ...
};
在奶酪市场.h
中:
class Market {
public:
// ...
private:
// ...
};
#include "Market.h"
class CerealMarket: public Market {
public:
// ...
private:
// ...
};
#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;
};
但是,这包括sMarket.h
两次。有没有可能拥有这种类继承结构,而不让编译器认为市场
存在重复的定义
我正在使用以下命令进行构建:
g++-Wall-Werror-pedantic-O1 main.cpp CommodityExchange.cpp Market.cpp CerealMarket.cpp CheeseMarket.cpp
您需要配备防护装置:
#ifndef MARKET_H
#define MARKET_H
// your code
#endif
这可以防止编译器包含两次一个文件。在您的
市场.h
中,只需将#pragma once
放在文件的最上面。
或者,您也可以使用防护装置:
#ifndef MARKET_H
#define MARKET_H
/* your class declaration */
#endif // MARKET_H
<>这是常见的做法,避免在C++中包含两个标题。