我在用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/

10-11 18:10