我正在用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
的編譯錯誤是在結構的定義裏面的Timing.h文件:
預期「;」 '*'令牌之前
我在做什麼錯?
是啊!它確實有幫助, 但是如果我想在Agent.h文件中創建一些Timing.h函數呢? 我需要在Timing.h中包含Agent.h嗎? – 2010-09-01 12:53:11
你能解釋爲什麼這解決了這個問題嗎? – 2010-09-01 12:54:51
因爲當你所做的全部工作是使用一個類作爲返回類型,一個指針或引用成員,或一個指針或引用參數時,編譯器不需要查看該類的完整定義以便繼續。一個簡單的前瞻性聲明說「有一個具有以下名稱的類」就足夠了。如果您想實際*使用*給定類型的對象,則需要進行完整的分解。因此,在time.cpp中,實際使用'Message :: _ agent'字段*時,您確實需要包含'Agent'(agent.h)的完整定義。 – 2010-09-01 13:01:48