类的循环依赖关系
Circular Dependency of classes
大家好,当我尝试在下面编译代码时,我对我的小项目有疑问,我收到错误,我的一个类看不到其他类,请帮助我!我认为我需要一些小修复来运行它。谢谢。
#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: 错误: 在此作用域映射客户端中未声明"客户端";这是完整的错误代码
两个头文件之间有一个循环依赖关系。 Client.h
包括Server.h
,Server.h
包括Client.h
。当Client.h
被扩展时,它定义了它的包含保护CLIENT_H_
,然后(最终)尝试扩展Server.h
,它试图第二次包含Client.h
。包含保护会阻止它,因为它已经定义,因此在解析Server.h
代码之前,class Client
实际上永远不会被定义。
此处的解决方案是向前声明Client
,如下所示:
class Client;
您可以将该行放在 Server.h
内,或放在包含保护上方的Client.h
中。
相关文章:
- C++GTKMM gui循环依赖关系
- 如何在头文件中声明类模板(由于循环依赖关系)
- 对在不同二进制文件中创建的对象文件的依赖关系
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 模拟测试中类的依赖关系
- C++模板方法中的循环依赖关系
- 解析正交模块的依赖关系
- 如何在 Mac OS 上安装 boost-mpi 及其对 clang 的依赖关系?
- Wt::D bo 中的循环依赖关系
- 在包含窗口标头时难以解决循环依赖关系问题
- 当依赖关系和依赖关系都是多态时,在哪个继承级别存储依赖关系指针?
- 解决循环依赖关系 c++ 的想法
- C++循环依赖关系,未声明的标识符
- C++ 中的循环依赖关系问题
- 为什么包含需要进一步的依赖关系?
- 使用 cmake 获取外部依赖关系
- CMake 外部和内部静态库的循环依赖关系
- 在没有Xcode的macOS中开发具有依赖关系的应用程序
- "std::shared_ptr"循环依赖关系是如何导致问题的