c++ - 循环依赖问题

标签 c++ visual-studio-2010 visual-c++

我在三个头文件之间有一个三向循环依赖,每个头文件中都有一个类。这是 Agent2 类的相关部分:

#ifndef BUYINGJEANS1_H
#define BUYINGJEANS1_H
class Agent2{
    public:
    Agent2(){}

    double getAdvertisingFash(int currentTime, int sFash, int brand){
        Agent1 agent1;
        Agent3 agent3;
        double probabilityOfChangingFashion = (exp((-advertisementArray[currentTime+1][brand]*pow(abs(min(fashionArray[brand]+1,4.0)-sFash),D))+(-alphaArray[2][2]*pow(abs(fashionArray[brand]-sFash),AArray[2][2]))) * (exp((-(agent1.alphaArray[2][1])*pow(abs((agent1.fashionArray[brand])-sFash),AArray[2][1]))))*(exp((-(agent3.alphaArray[2][3])*pow(abs((agent3.fashionArray[brand])-sFash),AArray[2][3])))))/getZScoreAdvertisingFash(currentTime,brand);
        return probabilityOfChangingFashion;
    }
#endif

Agent1Agent3 类中存在等效函数,除了 Agent1 会使用 Agent2Agent3Agent3 将使用 Agent1Agent2

我知道前向声明在这里不起作用,因为我显然需要使用类 Agent2Agent3 的成员。当我在使用此代码的单独 cpp 文件中运行主函数时,我收到 Agent1Agent3 的未声明标识符错误。

有人知道我如何以最简单的方式解决这个问题吗?

最佳答案

您需要将一个或多个函数的主体移动到 .cpp 文件而不是标题中。这样,Agent1Agent3 可以包含 Agent2 header ,而 Agent2 header 不需要它们。

您只需移动其中一个类的功能实现即可打破循环依赖,但您可能希望这样做是为了使所有三个类保持一致并避免将来出现类似问题。

在 Agent2.H 中:

#ifndef BUYINGJEANS1_H
#define BUYINGJEANS1_H
class Agent2{
    public:
    Agent2(){}

    double getAdvertisingFash(int currentTime, int sFash, int brand);
}
#endif

在 Agent2.cpp 中:

#include "Agent2.H"

#include "Agent1.H"
#include "Agent3.H"
double Agent2::getAdvertisingFash(int currentTime, int sFash, int brand)
{
    Agent1 agent1;
    Agent3 agent3;
    double probabilityOfChangingFashion = (exp((-advertisementArray[currentTime+1][brand]*pow(abs(min(fashionArray[brand]+1,4.0)-sFash),D))+(-alphaArray[2][2]*pow(abs(fashionArray[brand]-sFash),AArray[2][2]))) * (exp((-(agent1.alphaArray[2][1])*pow(abs((agent1.fashionArray[brand])-sFash),AArray[2][1]))))*(exp((-(agent3.alphaArray[2][3])*pow(abs((agent3.fashionArray[brand])-sFash),AArray[2][3])))))/getZScoreAdvertisingFash(currentTime,brand);
    return probabilityOfChangingFashion;
}

关于c++ - 循环依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154834/

相关文章:

c++ - 我可以用一些宏恢复 MSVC 16.6 中删除的 std::result_of 吗?

c++ - gcc C++14 与 msvc++ 2015 中的级联宏

c++ - Microsoft Visual Studio是否不正确地定义类型特征的值?

c++ - 以二进制模式读取 char 的问题,╡

c++ - 移植 C -> C++,在访问未命名 union 内的结构时遇到问题

c++ - AdjustTokenPrivileges 能否提升管理员权限?

visual-studio-2010 - TFS 2010 电子邮件警报

c++ - 计算也是平方数的第 N 个三角数

c++ - SAPI:应用程序不说话

c++ - 为什么C++中的消息框显示中文消息