C++11 错误2文件相互包含

C++11 错误2文件相互包含,c++11,compiler-errors,C++11,Compiler Errors,我在尝试相互包含2个文件时遇到以下问题: /include//include//src/Socket//LinuxClass/ThreadingPool.hpp:38:5: 错误:“客户端”未命名类型 客户 我已经找到了在第二个文件中声明第一个类的解决方案,但是错误仍然存在,这里是2.h #ifndef THREADINGPOOL_HPP_ #define THREADINGPOOL_HPP_ #include <functional> #include <algorith

我在尝试相互包含2个文件时遇到以下问题:

/include//include//src/Socket//LinuxClass/ThreadingPool.hpp:38:5: 错误:“客户端”未命名类型 客户

我已经找到了在第二个文件中声明第一个类的解决方案,但是错误仍然存在,这里是2.h

#ifndef THREADINGPOOL_HPP_

#define THREADINGPOOL_HPP_

#include <functional>
#include <algorithm>
#include <queue>
#include "../Socket/Client.hpp"
#include "../Intefaces/IThread.hpp"
#include "Mutex.hpp"
#include "Thread.hpp"
#include "Condvar.hpp"
#include "Process.hpp"

class ThreadingPool {

  public:
    ThreadingPool(unsigned int num_thr);
    ~ThreadingPool();
    void Add_fct(std::function<void()> job);
  private:
    enum States {LIVE, DIE};
    std::vector<std::thread> thrdVec;
    std::vector<States> states;
    std::queue<std::function<void()>> jobs;
    Mutex mtex;
    Condvar cond;
    Process pros;
    Client client;
};

#endif  /* !THREADINGPOOL_HPP_ */
\ifndef THREADINGPOOL\u水电站_
#定义线程池\u HPP_
#包括
#包括
#包括
#包括“./Socket/Client.hpp”
#包括“./Intefaces/IThread.hpp”
#包括“Mutex.hpp”
#包括“Thread.hpp”
#包括“Condvar.hpp”
#包括“Process.hpp”
类线程池{
公众:
线程池(未签名的整数);
~ThreadingPool();
void Add_fct(标准::功能作业);
私人:
枚举状态{LIVE,DIE};
std::载体thrdVec;
向量状态;
std::队列作业;
互斥mtex;
Condvar-cond;
工艺专业人员;
客户;
};
#endif/*!螺纹连接池*/
第二个呢

#ifndef CLIENT_HPP_
# define CLIENT_HPP_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <functional>

#include <unistd.h>

#include <fcntl.h>

#include <sys/socket.h>
#include <arpa/inet.h>

#define PORT 1043
#define METASIZE 1024

#include "check_cmd.hpp"

class ThreadingPool;

class Client {
public:
    Client();
    ~Client();

void ifMessage(ThreadingPool * thrdPool);

private:
    int csock;
    struct sockaddr_in csin;

};

#endif
\ifndef客户端\u水电站_
#定义客户_水电站_
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义端口1043
#定义元大小1024
#包括“检查命令hpp”
类线程池;
类客户端{
公众:
客户机();
~Client();
void ifMessage(ThreadingPool*thrdPool);
私人:
int csock;
csin中的结构sockaddr_;
};
#恩迪夫

我认为你的问题在于你把#define(hashtag之间的空格)放在 而不是#define(hashtag之间没有空格) 我认为它之间的空格导致编译器无法 在client.hpp中实现代码,因为您没有收到错误 说


client.hpp不存在,而是出现一个错误,表明client(类)不存在。如果没有正确编写定义,编译器几乎跳过了#ifndef

\define
中的代码,这是合法的,与#define没有什么区别。它不会改变任何东西,错误仍然是相同的或src//include//include//src/Socket//LinuxClass//Socket/Client。hpp:37:20:错误:“ThreadingPool”未被声明为void ifMessage(ThreadingPool*thrdPool);这取决于我们首先输入的是哪一个。不清楚Client.hpp是如何包含ThreadingPool.hpp的,但它似乎是。可能通过check_cmd.hpp?