大家好我有一个关于我的小项目的问题,当我尝试编译代码时,我得到错误,我的一个课程看不到其他请帮助我!我认为我需要一些小修复来运行它。 感谢。
#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:错误:未在此范围映射客户端中声明“客户端”;这是完整的错误代码
答案 0 :(得分:3)
您的两个头文件之间存在循环依赖关系。 Client.h
包括Server.h
,Server.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
内的包含守卫。