提问者:小点点

转发带有继承的声明,并包含不完整的类型或预期的类名


有人能帮忙吗?

假设,我有以下C++文件:

#ifndef ROOM_H
#define ROOM_H

#include "Console.h"

...

class Room {
public:
   void room();
};

#endif // ROOM_H
#include "Room.h"

void Room::room() {
  Console::print();
}
#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
#include "Console.h"

void Console::print() {
    ;
}

void Console::printRoom(Room& room) { 
    // print member of room 
}

void Console::printRoomChild(RoomChild& roomChild) { 
    // print member of roomChild 
}

#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
#include "RoomChild.h"

void RoomChild::roomChild() {
    Console::print();
}

我试着向每个类提出声明,或者只向其中的一些类提出声明。但是,它不工作,给我也...类型不完整,或在“{”token class roomchild:public Room{之前应为类名


共1个答案

匿名用户

包装物都被弄得乱七八糟的。

将多余的include指令从不相关的文件中删除。

在所依赖的文件上添加include指令。

房间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.h does depend on it. */
#include "Console.h"

void Room::room() {
  Console::print();
}

控制台h

#ifndef CONSOLE_H
#define CONSOLE_H

/* DELETE: because Room.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() {
    ;
}

室童。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.h does depend on it. */
#include "Console.h"

void RoomChild::roomChild() {
    Console::print();
}