C++ 在C+;中,如何让两个类通过向量(map,multimap..)相互链接+;?
我有两个类,其中一个向量包含第三个类的实例 基本上我有三门课:C++ 在C+;中,如何让两个类通过向量(map,multimap..)相互链接+;?,c++,class,dictionary,vector,multimap,C++,Class,Dictionary,Vector,Multimap,我有两个类,其中一个向量包含第三个类的实例 基本上我有三门课: 公司 市场 股票 公司和市场可以有0..*股票和股票必须链接到1个市场和1个公司(以打印值等) 我不知道该怎么做才好。对我来说,问题是当我在市场和公司中做一个股票向量时,我不能把公司和市场的股票联系起来,因为当股票.h是第一个它不知道股票类中的市场和公司类的时候。如果Corporation.h和Market.h是它第一个说我的,那么它不知道Corporation和Market类中的股票类 构建解决方案的最佳代码是什么?我不能对V
- 公司
- 市场
- 股票
这是工作,我写了“阶级股票;阶级公司;阶级市场”;它并不关心它不知道这些阶级的事实。感谢大家,它这么快!我会在完成工作后阅读你的链接。:)你正在寻找和。所以,你可以把
类放在市场上代码>在尚未定义市场的地方。您正在寻找和。所以,你可以把类放在市场上代码>在市场还没有定义的地方。你要找的是术语循环依赖性
看这里:
所以,你可以把类放在市场上代码>行在市场
尚未定义的地方。您要查找的是术语循环依赖关系
查看此处:
所以,你可以把类放在市场上代码>行在市场
尚未定义的地方。如何:
struct Corporation {
vector <class Equity *> equities;
}
struct Market {
vector <class Equity *> equities;
};
struct Equity {
Market * market;
Corporation * corp;
};
struct公司{
矢量股票;
}
结构市场{
矢量股票;
};
结构性股权{
市场*市场;
公司*Corporation;
};
那么:
struct Corporation {
vector <class Equity *> equities;
}
struct Market {
vector <class Equity *> equities;
};
struct Equity {
Market * market;
Corporation * corp;
};
struct公司{
矢量股票;
}
结构市场{
矢量股票;
};
结构性股权{
市场*市场;
公司*Corporation;
};
最简单的方法是在一个公共头中向前声明或原型化所有类和类型,在该头上放置防护装置,并包含所有代码文件的头。例如:
header.hpp:
#ifndef COMMON_HPP
#define COMMON_HPP
class Corporation;
class Market;
class Equities;
typedef std::shared_ptr<Corporation> CorpRef;
typedef std::list<CorpRef> CorpList;
#endif /*COMMON_HPP*/
等等
如果您专门使用Visual Studio,则可以使用#pragma once
代替#ifndef
保护。最简单的方法是在公共头中向前声明或原型化所有类和类型,在该头上放置保护,并包含所有代码文件的头。例如:
header.hpp:
#ifndef COMMON_HPP
#define COMMON_HPP
class Corporation;
class Market;
class Equities;
typedef std::shared_ptr<Corporation> CorpRef;
typedef std::list<CorpRef> CorpList;
#endif /*COMMON_HPP*/
等等
如果您专门使用Visual Studio,则可以使用#pragma once
来代替#ifndef
保护。“peachykeen”选项可能是最佳选项,但如果您使用继承或子类化实体,另一个选项可能会对您有所帮助:
声明.h
财务应用程序.h
//这些类有引用,但对于父类,
//不是彼此
公共类CorporationClass:CorporationBaseClass
{
矢量股票;
}
公共类MarketClass:MarketBaseClass
{
矢量股票;
}
公共类EquitiesClass:EquitiesBaseClass
{
公共公司BaseClass*公司;
公共市场基类*市场;
}
公共类MyFinantialAppClass
{
受保护的媒介公司;
受保护的病媒市场;
保护病媒权益;
public CorporationBaseClass*addCorporation(){…}
公共市场基类*addMarket(){…}
公共股本基类*增加股本(公司基类、市场基类)
{ ... }
}
请注意,工人阶级,每一个都是一个“基类”,
工人阶级相互参照的是基类,而不是阶级本身。
这有助于避免循环/转发的内容,因为它很难使用。
注意,有一个应用程序。类,用作主类和关联类(“权益”)的容器
检查“股权”类别是否代表“市场”和“公司”之间的关联。该类别不是“市场”和“公司”的一部分,而是“应用程序”的一个组成部分。如果您想添加任何类,可以通过容器而不是类本身的列表来添加
另外,请注意,还有一个“finential root基类”,可以帮助您与所有类共享内容。“peachykeen”选项可能是最佳选项,但如果您使用继承或子类化实体,另一个选项可能会帮助您:
声明.h
财务应用程序.h
//这些类有引用,但对于父类,
//不是彼此
公共类CorporationClass:CorporationBaseClass
{
矢量股票;
}
公共类MarketClass:MarketBaseClass
{
矢量股票;
}
公共类EquitiesClass:EquitiesBaseClass
{
公共公司BaseClass*公司;
公共市场基类*市场;
}
公共类MyFinantialAppClass
{
受保护的媒介公司;
受保护的病媒市场;
保护病媒权益;
public CorporationBaseClass*addCorporation(){…}
公共市场基类*addMarket(){…}
公共股本基类*增加股本(公司基类、市场基类)
{ ... }
}
请注意,工人阶级,每一个都是一个“基类”,
工人阶级互相参照
// these classes have references, but, to parent classes,
// not each others
public class CorporationClass: CorporationBaseClass
{
vector<EquitiesBaseClass> Equities;
}
public class MarketClass: MarketBaseClass
{
vector<EquitiesBaseClass> Equities;
}
public class EquitiesClass: EquitiesBaseClass
{
public CorporationBaseClass* Corporation;
public MarketBaseClass* Market;
}
public class MyFinantialAppClass
{
protected vector<CorporationBaseClass> Corporations;
protected vector<MarketBaseClass> Markets;
protected vector<EquitiesBaseClass> Equities;
public CorporationBaseClass* addCorporation() { ... }
public MarketBaseClass* addMarket() { ... }
public EquitiesBaseClass* addEquity(CorporationBaseClass, MarketBaseClass)
{ ... }
}