C++ C++;循环依赖设计

C++ C++;循环依赖设计,c++,circular-dependency,C++,Circular Dependency,已经使用解决方案一段时间了。。。提出的第一个问题。(不确定这是不是合适的地点)。我遇到了一个设计问题 我有三门课:用户、策略和沟通者 我希望用户有一个指向通信器的指针,并在必要时调用函数 我希望用户有一个类策略列表,并在必要时调用策略函数 我希望Communicator有一个类策略列表,一个指向用户的指针,并在必要时调用这些函数 如果有帮助的话,通信器只是一个围绕套接字连接的包装器,它侦听来自客户端的消息,并将它们发送给用户或策略(以适当的为准)。它还包含一个函数Send(string mess

已经使用解决方案一段时间了。。。提出的第一个问题。(不确定这是不是合适的地点)。我遇到了一个设计问题

我有三门课:用户、策略和沟通者

我希望用户有一个指向通信器的指针,并在必要时调用函数

我希望用户有一个类策略列表,并在必要时调用策略函数

我希望Communicator有一个类策略列表,一个指向用户的指针,并在必要时调用这些函数

如果有帮助的话,通信器只是一个围绕套接字连接的包装器,它侦听来自客户端的消息,并将它们发送给用户或策略(以适当的为准)。它还包含一个函数
Send(string message)
,用于将来自用户和策略的消息发送到客户端

问题是我无法编译,因为头文件最终包含了彼此。
任何想法都将不胜感激

< P>不确定您到底想听到什么,但是谈到C++,循环依赖问题是通过使用Booo::Enable SydDyFROXX和Boost::SyrdypTr.< /P>来解决的。

Hth

< P>不确定您到底想听到什么,但是谈到C++,循环依赖问题是通过使用Booo::Enable SydDyFROXX和Boost::SyrdypTr.< /P>来解决的。
HTH

转发声明是您的朋友

战略h:

class User;
class Communicator;

class Strategy {
    /* Definition of Strategy, restricted use of User and Communicator */
};
Strategy.cpp:

#include "Strategy.h"
#include "User.h"
#include "Communicator.h"

/* Full use of all three classes */

我是你的朋友

战略h:

class User;
class Communicator;

class Strategy {
    /* Definition of Strategy, restricted use of User and Communicator */
};
Strategy.cpp:

#include "Strategy.h"
#include "User.h"
#include "Communicator.h"

/* Full use of all three classes */
您需要使用来避免循环包含标题

请注意,转发声明对如何进一步使用不完整类型有其自身的限制。 对于不完整类型,您可以:

  • 将成员声明为指向不完整类型的指针
  • 声明接受/返回不完整类型的函数或方法
  • 定义接受/返回指向不完整类型的指针(但不使用其成员)的函数或方法
如果类型不完整,则不能:

  • 使用它来声明成员
  • 使用此类型定义函数或方法
您需要使用以避免标题的循环包含

请注意,转发声明对如何进一步使用不完整类型有其自身的限制。 对于不完整类型,您可以:

  • 将成员声明为指向不完整类型的指针
  • 声明接受/返回不完整类型的函数或方法
  • 定义接受/返回指向不完整类型的指针(但不使用其成员)的函数或方法
如果类型不完整,则不能:

  • 使用它来声明成员
  • 使用此类型定义函数或方法

问题是什么?你需要关于什么的想法?编辑这个问题,我基本上希望避免头文件包括彼此。Q是什么?你需要关于什么的想法吗?编辑了这个问题,我基本上是希望避免包含彼此的头文件。如果我向前声明类,我不能使用它的函数,对吗?不是在头文件中。但是你可以在源文件中包含头文件,你会没事的。@Joshua:你可以,如果你在策略中延迟函数的定义。如果我向前声明类,我不能使用它的函数,对吗?不是在头文件中。但是你可以在源文件中包含头文件,你会没事的。@Joshua:你可以,如果你在策略中延迟函数的定义。如果我向前声明类,我就不能使用它的函数,对吗?好的,我理解。我没有意识到我也可以在源文件中包含头文件。谢谢如果我向前声明这个类,我就不能使用它的函数,对吗?好的,我明白了。我没有意识到我也可以在源文件中包含头文件。谢谢