循环依赖性

时间:2015-01-26 18:33:09

标签: c++

大家好我有一个关于我的小项目的问题,当我尝试编译代码时,我得到错误,我的一个课程看不到其他请帮助我!我认为我需要一些小修复来运行它。 感谢。

#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中包含的文件:8:0,来自Client.cpp:1:Server.h:13:13:错误:未在此范围映射客户端中声明“客户端”;这是完整的错误代码

1 个答案:

答案 0 :(得分:3)

您的两个头文件之间存在循环依赖关系。 Client.h包括Server.hServer.h包含Client.h。在展开Client.h时,它会定义其包含守护CLIENT_H_,然后(最终)尝试展开Server.h,它会尝试第二次包含Client.h。 include guard会阻止它,因为它已经定义了,所以class Client在解析Server.h代码之前从未实际定义过。{/ p>

此处的解决方案是按以下方式转发声明Client

class Client;

您可以将该行放在Server.h内,或Client.h内的包含守卫。