2015-01-26 121 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