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