当前位置: 首页 > 知识库问答 >
问题:

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

狄宜然
2023-03-14

有人能帮忙吗?

假设,我有以下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个答案

柳俊彦
2023-03-14

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

将多余的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();
}
 类似资料:
  • 我在Python 3.5中遇到了一个问题。我有一个类(B ),它继承了另一个类(A)。我试图只获取B中声明的方法,但它返回了B类中声明的方法,也从a类继承了方法。 这里的代码: 返回: 我想要: 如何修改get_methods来过滤继承的方法? 祝你今天愉快,谢谢。

  • 我对遗传的理解是相当基础的。

  • 这是我的SDN 4实体: 这是输出: 我有一个密码查询: AFAIK(Neo4j SDN4实体继承和索引)这样Neo4j索引将不会被使用,因为我试图到达d节点上:决策标签。 在SDN 4中,是否有任何方法通过类继承来定义索引(将CreateDate留在BaseEntity级别),以便能够在

  • 问题内容: 是否有没有不将Object继承为SuperClass的类,或者可能已经过时/不赞成使用的类? 问题答案: 根据Java Object超类,不扩展。 除此之外,所有类,即 如果不扩展任何其他超类,则隐式扩展Object类。 另一方面,接口不扩展对象,因为接口根据定义不能扩展类。同样,接口不能包含可调用方法,也不能从它们实例化对象。最终实现接口时,实现类将必须扩展Object(并且不,不实

  • 我有下面的代码。 我得到编译器错误时,分配到,因为它的类型。我知道这是与继承,但我不知道为什么,因为内容是相同的。此外,我如何强制将其转换为。 我试过了 但是它在前者中抛出了一个关于转换的异常,在后者中变成了null。不知道去谷歌上找什么。我的意思是像这样,但完全相反。

  • 我有一个类,用于使用struct解码二进制数据并存储在NamedTuple中,如下所示: 这是没有问题的,我可以如下使用: 但是,如果我尝试将其更改为继承类方法,如下所示,它会失败: 然后它错误与。 我知道从NamedTuple继承有些问题,但我想知道是否有解决办法? 编辑:正如下面的其他人所暗示的那样,看起来数据类是要走的路:一种用于类型检查目的的子类命名Tuple的方法