前向声明继承并包含 |不完整的类型或预期的 class 名称
Forward declaration with Inheritance and include | incomplete type or expected class name
有人可以帮忙吗?
假设,我有以下 C++ 文件:
Room.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();
}
Console.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
Console.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();
}
我的问题是
是否可以让它工作?
我已尝试向每个 class 或仅向其中一些人提出声明。但是,它不起作用并给我 ... has incomplete type
或 expected class-name before '{' token class RoomChild: public Room {
包括的都搞砸了。
从不相关的文件中删除多余的包含指令。
在它们所依赖的文件上添加 include 指令。
Room.h
#ifndef ROOM_H
#define ROOM_H
/* DELETE: because Room.h does not depend on it.
#include "Console.h"
*/
// ...
class Room {
public:
void room();
};
#endif // ROOM_H
Room.cpp
#include "Room.h"
/* ADD: because Room.cpp does depend on it. */
#include "Console.h"
void Room::room() {
Console::print();
}
Console.h
#ifndef CONSOLE_H
#define CONSOLE_H
/* DELETE: because Console.h does not depend on them.
#include "Room.h"
#include "RoomChild.h"
*/
class Console {
public:
static void print();
};
#endif // CONSOLE_H
Console.cpp
#include "Console.h"
void Console::print() {
;
}
RoomChild.h
#ifndef ROOM_CHILD_H
#define ROOM_CHILD_H
#include "Room.h"
/* DELETE: because RoomChild.h does not depend on it
#include "Console.h"
*/
class RoomChild : public Room {
public:
void roomChild();
};
#endif // ROOM_CHILD_H
RoomChild.cpp
#include "RoomChild.h"
/* ADD: because RoomChild.cpp does depend on it. */
#include "Console.h"
void RoomChild::roomChild() {
Console::print();
}
有人可以帮忙吗?
假设,我有以下 C++ 文件:
Room.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();
}
Console.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
Console.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();
}
我的问题是
是否可以让它工作?
我已尝试向每个 class 或仅向其中一些人提出声明。但是,它不起作用并给我 ... has incomplete type
或 expected class-name before '{' token class RoomChild: public Room {
包括的都搞砸了。
从不相关的文件中删除多余的包含指令。
在它们所依赖的文件上添加 include 指令。
Room.h
#ifndef ROOM_H
#define ROOM_H
/* DELETE: because Room.h does not depend on it.
#include "Console.h"
*/
// ...
class Room {
public:
void room();
};
#endif // ROOM_H
Room.cpp
#include "Room.h"
/* ADD: because Room.cpp does depend on it. */
#include "Console.h"
void Room::room() {
Console::print();
}
Console.h
#ifndef CONSOLE_H
#define CONSOLE_H
/* DELETE: because Console.h does not depend on them.
#include "Room.h"
#include "RoomChild.h"
*/
class Console {
public:
static void print();
};
#endif // CONSOLE_H
Console.cpp
#include "Console.h"
void Console::print() {
;
}
RoomChild.h
#ifndef ROOM_CHILD_H
#define ROOM_CHILD_H
#include "Room.h"
/* DELETE: because RoomChild.h does not depend on it
#include "Console.h"
*/
class RoomChild : public Room {
public:
void roomChild();
};
#endif // ROOM_CHILD_H
RoomChild.cpp
#include "RoomChild.h"
/* ADD: because RoomChild.cpp does depend on it. */
#include "Console.h"
void RoomChild::roomChild() {
Console::print();
}