c如何创建相互依赖的类

我有一个存储类.这类成员经常被修改.

每次修改成员时,我都想保存类的状态(克隆类实例并保存它).

所以我想创建一个新类,它将保存这些状态.

例如:

假设我在文件storage.h中有一个Storage类

class Storage 
{
 public:
   Int m_cnt;
   <lots of other members...>

   StorageHistory m_his;
};

和文件storagehistory.h中的StorageHistory类

class StorageHistory 
{
 public:
   std::vector<Storage> m_history_vec;
};

假设:

> StorageHistory类应保存在Storage类中.原因是Storage类是一个可以在所有类/包中访问的主类.为了最大限度地减少代码中的更改,我希望StorageHistory与Storage类相结合.
>由于创建了多个存储实例,因此StorageHistory不能是静态或单例.

问题:

>无法编译此代码. storage.h需要在storagehistory.h之前编译,反之亦然
>如果StorageHistory无法存储在Storage类中,那么我该保留它吗?谁是这堂课的老板?

需要帮助来定义这两个类别之间的联系?

最佳答案 首先:除非您定义纯数据结构,否则不要公开数据成员.然后:Int不是C类型.

现在回答您的问题:您可以使用前向声明.由于StorageHistory直接在Storage中使用,因此无法进行前向声明,但Storage仅在StorageHistory中的模板数据成员(即std :: vector)中使用,如果该模板仅声明为存储,则该模板不需要存储的定义一个变量.只有在使用向量方法时才需要定义.

所以这是解开的代码:

StorageHistory.h

#include <vector>
class Storage;
class StorageHistory 
{
  std::vector<Storage> m_history_vec;
public:
  /* method declarations */
};

storage.h定义

#include "StorageHistory.h"
class Storage 
{
  int m_cnt;
  /* <lots of other members...> */
  StorageHistory m_his;
public:
  /* method declarations */
};

Storage.cpp

#include "Storage.h"
#include "StorageHistory.h" //not necessarily needed, because implicitly included, but thats a matter of coding style

/* ... Storage methods definitions ... */
void Storage::changeVar(/*...*/)
{
  m_his.push_back(*this);
  /* ... */
}

StorageHistory.cpp

#include "StorageHistory.h"
#include "Storage.h"

/* ... StorageHistory method definitions ... */
点赞