【发布时间】:2021-06-16 23:16:07
【问题描述】:
有人可以帮忙吗?
假设,我有以下 C++ 文件:
房间.h
#ifndef ROOM_H
#define ROOM_H
#include "Console.h"
...
class Room {
public:
void room();
};
#endif // ROOM_H
Room.cpp
#include "Room.h"
void Room::room() {
Console::print();
}
控制台.h
#ifndef CONSOLE_H
#define CONSOLE_H
#include "Room.h"
#include "RoomChild.h"
class Console {
public:
static void print();
static void printRoom(Room& room);
static void printRoomChild(RoomChild& room);
};
#endif // CONSOLE_H
控制台.cpp
#include "Console.h"
void Console::print() {
;
}
void Console::printRoom(Room& room) {
// print member of room
}
void Console::printRoomChild(RoomChild& roomChild) {
// print member of roomChild
}
RoomChild.h
#ifndef ROOM_CHILD_H
#define ROOM_CHILD_H
#include "Room.h"
#include "Console.h"
class RoomChild : public Room {
public:
void roomChild();
};
#endif // ROOM_CHILD_H
RoomChild.cpp
#include "RoomChild.h"
void RoomChild::roomChild() {
Console::print();
}
我的问题是
有可能让它工作吗?
我试图向每个班级或仅向其中一些班级提出声明。但是,它不起作用并给我... has incomplete type 或expected class-name before '{' token class RoomChild: public Room {
【问题讨论】:
-
您在类定义后缺少分号。
-
您有循环包含,这可能会导致各种神秘的错误消息。除了
RoomChild.h中的#include "Room.h"之外,您可以删除头文件中的所有包含项 -
去掉header后,需要在cpp文件中添加一些。
-
为什么
Room.h中有#include "Console.h"?Room.h不依赖于Console.h。 -
如果您将
#include "Console.h"从Room.h移动到Room.cpp,它将起作用。但请注意Room和room并不相同。
标签: c++ inheritance include forward-declaration incomplete-type