我在三个头文件之间有一个三向循环依赖,每个头文件都有一个类。这是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除了Agent1将使用Agent2和Agent3,而Agent3将使用Agent1和Agent2之外,另一个等价函数存在于Agent1和Agent3类中。
我知道转发声明在这里不起作用,因为我显然需要使用类Agent2和Agent3的成员。当我在使用此代码的单独cpp文件中运行主函数时,收到Agent1和Agent3的未声明标识符错误。
有人知道我如何以最简单的方式解决这个问题吗?
发布于 2012-04-14 23:38:15
您需要将一个或多个函数的主体移动到.cpp文件中,而不是移动到头中。这样,Agent1和Agent3可以在不需要Agent2报头的情况下包括Agent2报头。
您只需要移动其中一个类的函数的实现来打破循环依赖,但您可能希望这样做,以使所有三个类保持一致,并避免将来出现类似的问题。
在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;
}发布于 2012-04-14 23:37:47
将成员函数定义移动到单独的.cpp文件中,并在其中包含头文件。
如下所示:
#include "agent2.hpp"
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;
}https://stackoverflow.com/questions/10154834
复制相似问题