Gen*_*ene -2 c++ compilation header-files
我正在尝试编译我的代码,我无法弄清楚我做错了什么.我相信它可能是我编译的顺序,但我无法弄清楚我的错误.
我的错误代码:
g++ -w -c JokeServer.cpp
In file included from JokeServer.h:4:0,
from JokeServer.cpp:52:
AdminServer.h:9:2: error: ‘JokeServer’ does not name a type
make: *** [JokeServer.o] Error 1
Run Code Online (Sandbox Code Playgroud)
谢谢.
JokeServer.h文件:
#ifndef JOKESERVER_H
#define JOKESERVER_H
#include "AdminServer.h"
#include "Subject.h"
#include "Observer.h"
#include "Worker.h"
class JokeServer: public Subject {
private:
AdminServer* m_admin_server;
public:
//public functions
};
#endif
Run Code Online (Sandbox Code Playgroud)
AdminServer.h文件:
#ifndef ADMINSERVER_H
#define ADMINSERVER_H
#include "JokeServer.h"
#include "AdminWorker.h"
class AdminServer {
private:
JokeServer* m_joke_server;
public:
//public functions
};
#endif
Run Code Online (Sandbox Code Playgroud)
我的文件:
CPPFLAGS = g++ -w
all: JokeServer JokeClient AdminClient
#-------------------------------------
# JOKE SERVER
#-------------------------------------
JokeServer: JokeServer.o Worker.o JokeGenerator.o ProverbGenerator.o AdminServer.o AdminWorker.o
$(CPPFLAGS) JokeServer.o Worker.o JokeGenerator.o ProverbGenerator.o AdminServer.o AdminWorker.o -o JokeServer -lpthread
JokeServer.o: JokeServer.cpp JokeServer.h Subject.h
$(CPPFLAGS) -c JokeServer.cpp
Worker.o: Worker.cpp Worker.h Observer.h
$(CPPFLAGS) -c Worker.cpp
JokeGenerator.o: JokeGenerator.cpp JokeGenerator.h
$(CPPFLAGS) -c JokeGenerator.cpp
ProverbGenerator.o: ProverbGenerator.cpp ProverbGenerator.h
$(CPPFLAGS) -c ProverbGenerator.cpp
AdminServer.o: AdminServer.cpp AdminServer.h
$(CPPFLAGS) -c AdminServer.cpp
AdminWorker.o: AdminWorker.cpp AdminWorker.h
$(CPPFLAGS) -c AdminWorker.cpp
Run Code Online (Sandbox Code Playgroud)
您的文件之间有循环引用.h.文件AdminServer.h并JokeServer.h互相包含.您应该使用前向声明来解决此问题.
例如,在JokeServer.h:
#ifndef JOKESERVER_H
#define JOKESERVER_H
// REMOVE THIS
// #include "AdminServer.h"
// ADD THIS
class AdminServer;
Run Code Online (Sandbox Code Playgroud)
另请注意,所有被这些文件间接地包括AdminServer.h通过包括JokeServer.h(例如,我怀疑,JokeServer.cpp)必须包括AdminServer.h访问类的定义AdminServer