C++ "does not name a type" - 无法编译源文件

C++ "does not name a type" - unable to compile source files

本文关键字:源文件 编译 does not name C++ type      更新时间:2023-10-16

我正试图编译我的代码,我不知道我做错了什么。我想可能是我的编译顺序不对,但是我不知道我的错误。

我的错误代码:

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

谢谢。

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

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

My make file:

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

您的.h文件之间有一个循环引用AdminServer.hJokeServer.h文件相互包含。你应该使用前向声明来解决这个问题。

例如,在JokeServer.h:

#ifndef JOKESERVER_H
#define JOKESERVER_H
// REMOVE THIS
// #include "AdminServer.h"
// ADD THIS
class AdminServer;
还要注意的是,所有通过包含JokeServer.h间接地包含AdminServer.h的文件(例如,我怀疑是JokeServer.cpp)必须包含AdminServer.h才能访问类AdminServer
的定义。