我在用C++写东西。我有2个类,我想像下面那样包含一个类(这些只是头文件):
//Timing.h
#ifndef _Timing_h
#define _Timing_h
#include "Agent.h"
class Timing{
private:
typedef struct Message{
Agent* _agent; //i get here a compilation problem
double _id;
} Message;
typedef struct MessageArr{
} MessageArr;
public:
Timing();
~Timing();
};
#endif
//Agent.h
#ifndef _Agent_h
#define _Agent_h
#include <string>
#include "Timing.h"
using namespace std;
class Agent{
public:
Agent(string agentName);
void SetNextAgent(Agent* nextAgent);
Agent* GetNextAgent();
void SendMessage(Agent* toAgent, double id);
void RecieveMessage(double val);
~Agent();
private:
string _agentName;
double _pID;
double _mID;
Agent* _nextAgent;
};
#endif
编译错误在struct的定义内的Timing.h文件中:
我究竟做错了什么?
最佳答案
尽量不要在Timing.h中包含“Agent.h”,而应包含前向引用:
#ifndef _Timing_h
#define _Timing_h
class Agent;
class Timing{
private:
typedef struct Message{
Agent* _agent; //I get here a compilation problem
double _id;
}Message;
typedef struct MessageArr{
}MessageArr;
public:
Timing();
~Timing();
};
#endif
您可以在
Agent.h
文件中包括timing.cpp
。这样,您可以删除循环引用,并减少类之间的耦合。
由于您没有在类
Timing
中使用类Agent
,因此您也可以删除此包含(但是这可能是您所缩短示例中的复制错误)。基本上-每当需要对象的大小或其某些功能时,都必须包括其头文件。如果不需要它(例如,如果仅使用指向该对象或引用的指针),则不需要。这样可以减少编译时间(尤其是对于大型项目)
对于一例问题-检查您最喜欢的设计模式书(例如GoF)。 singleton模式可能正是您所需要的。
关于c++ - 尝试在其他类(class)中使用类(class)时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3618066/