Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中,如何让两个类通过向量(map,multimap..)相互链接+;?_C++_Class_Dictionary_Vector_Multimap - Fatal编程技术网

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

我有两个类,其中一个向量包含第三个类的实例

基本上我有三门课:

  • 公司
  • 市场
  • 股票
公司和市场可以有0..*股票和股票必须链接到1个市场和1个公司(以打印值等)

我不知道该怎么做才好。对我来说,问题是当我在市场和公司中做一个股票向量时,我不能把公司和市场的股票联系起来,因为当股票.h是第一个它不知道股票类中的市场和公司类的时候。如果Corporation.h和Market.h是它第一个说我的,那么它不知道Corporation和Market类中的股票类

构建解决方案的最佳代码是什么?我不能对VisualStudio说,当他看到一门课时,他会离开,而这门课从来没有见过?(因为这个定义只适用于下一步,所以它没有改变……())C++中不可能在第一个类中:第二类的链接或向量,而在第二类中:第一类的链接或向量,在构建解决方案时没有问题,

编辑:


这是工作,我写了“阶级股票;阶级公司;阶级市场”;它并不关心它不知道这些阶级的事实。感谢大家,它这么快!我会在完成工作后阅读你的链接。:)

你正在寻找和。所以,你可以把
类放在市场上在尚未定义市场的地方。

您正在寻找和。所以,你可以把
类放在市场上在市场还没有定义的地方。

你要找的是术语
循环依赖性
看这里:


所以,你可以把
类放在市场上行在
市场
尚未定义的地方。

您要查找的是术语
循环依赖关系
查看此处:

所以,你可以把
类放在市场上行在
市场
尚未定义的地方。

如何:

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)
   { ... }

}