C ++循环依赖设计

时间:2012-01-11 15:18:51

标签: c++ circular-dependency

暂时使用解决方案......第一个问题。 (不确定这是否是正确的场地)。我遇到了设计问题。

我有3个班级,用户,战略和&通讯器。

我希望User有一个指向Communicator的指针,并在必要时调用函数。

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

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

如果它有帮助,Communicator只是一个套接字连接的包装器,它监听来自客户端的消息,并将它们发送给用户或策略,以适当的方式。它还包含一个函数Send(string message),它发送来自User&的消息。对客户的战略。

问题是我无法编译,因为头文件最终包含在内。 任何想法将不胜感激!

3 个答案:

答案 0 :(得分:3)

前瞻声明是你的朋友。

Strategy.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 */

答案 1 :(得分:1)

您需要使用 Forward declaration 来避免循环包含标头。

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

  • 声明成员是指向不完整类型的指针。
  • 声明接受/返回不完整类型的函数或方法。
  • 定义接受/返回指向不完整类型的指针的函数或方法(但不使用其成员)。

对于不完整类型,您不能:

  • 用它来宣布成员。
  • 使用此类型定义函数或方法。

答案 2 :(得分:0)

不确定你想听到什么,但是谈论c ++时,通过使用boost :: enable_shared_from_this和boost :: shared_ptr来解决循环依赖问题。

HTH

相关问题