2015-01-26 203 views
1

你好我有一個關於我的小項目的問題,當我嘗試編譯代碼波紋管時,我得到錯誤,我的一個類不能看到其他請幫助我!我認爲我需要一些小修補程序來運行它。 謝謝。 8:0,從Client.cpp:1:Server.h:13:類的循環依賴關係

#ifndef CLIENT_H_ 
#define CLIENT_H_ 

#include <iostream> 
#include <string> 
#include <vector> 
#include "Message.h" 
#include "Server.h" 


class Client 
{ 
private: 
    Server* server; 
    string name; 
    vector<Message*> Messages; 
public: 
    Client(string _name, Server* _server); 
    void printAllMessages(); 
    void printUnreadedMessages(); 
    bool sendMessage(string, string); 
    void reciveMessage(Message*); 
    string getName(); 
}; 

#endif 



#ifndef SERVER_H_ 
#define SERVER_H_ 

#include "Client.h" 
#include "Message.h" 
#include <string> 
#include <map> 


class Server 
{ 
private: 
    map<string,Client*> clients; 
    bool checkIfClientExist(string name); 
public: 
    Server(); 
    bool sendMessage(string,Message*); 
    void addClient(Client* toBeAdded); 
    void printAllClients(); 
}; 

#endif 

在文件從Client.h包含13:錯誤:「客戶」在此範圍地圖客戶未聲明;這是完整的錯誤代碼

+0

Client.h中包含的文件:8:0, 來自Client.cpp:1: Server.h:13:13:錯誤:'Client'未在此範圍內聲明 map 客戶; 這是完整的錯誤代碼 – user3216932 2015-01-26 18:34:03

+0

你有循環依賴。客戶端包括服務器,其中包括包含服務器的客戶端.... – Borgleader 2015-01-26 18:38:34

回答

3

你有兩個頭文件之間的循環依賴關係。包括Server.hServer.h包括Client.h。由於Client.h正在擴展中,因此它定義了其包含後衛CLIENT_H_,然後(最終)嘗試擴展Server.h,後者試圖再次包含Client.h。包含後衛會阻止它,因爲它已經被定義,所以class Client永遠不會在解析Server.h代碼之前被定義。

這裏的解決方案是前瞻性聲明Client如下:

class Client; 

你可以把線內Server.h,或Client.h了包括後衛以上。

+1

知道您只能在頭文件中引用'Client *'(不是任何方法或成員)並保存實現CPP文件的所有實際用法。 – crashmstr 2015-01-26 18:39:33