c++ - 错误: expected class-name before ‘{’ token with templates

标签 c++ templates inheritance

我正在尝试创建一个简单的基类和另一个继承它的类。我收到以下错误。

guard_room.h:17:1:错误:“{”标记之前应有类名

我看过其他帖子,似乎我在某个地方有循环依赖,但我已经完成了我所读到的所有操作来解决它。这是我的类(class)

基类room.h:

#ifndef _room
#define _room

template <typename U, typename T>
class room
{
    public:

        //default constructor
        room();

        //overloaded constructor
        room(U, T);


        //getters/setters
        void set_treasure(T);
        void set_name(U);
        T get_treasure() const;
        U get_name() const;

    private:

        U name;

        //room monster
        //monster room_monster

        T treasure;

};

#include "room.tem"

#endif

继承类guard_room.h:

#ifndef _guard_room
#define _guard_room

template <typename U, typename T> class room;

template <typename U, typename T>
class guard_room : public room
{
    public:

        //default constructor
        guard_room();

        //overloaded constructor
        guard_room(U, T, T) : room(U, T);

        //battle function?
        void battle();

    private:
        T dummy;

};

#include "guard_room.tem"
#endif

我也完全困惑于我需要将基本房间类的包含内容放在我的继承类中。感谢您对此的帮助。

最佳答案

首先,您的派生类需要能够查看基类的完整定义 - 您需要在派生类文件的顶部包含 header 。 (基类扩展派生类,因此基类在很大程度上是派生类的一部分)

此外,room 是一个模板而不是一个类 - 您只能从具体类继承,因此您需要指定模板参数。即

#include "room.h"

template <typename U, typename T>
class guard_room : public room<U, T>

最后 - 您的 .tem 文件是否也包含 header 防护? (如果没有,您也需要其中的内容以避免其他编译器错误)


此外,请注意初始化列表是构造函数定义的一部分,因此以下内容无效

    guard_room(U, T, T) : room(U, T);

如果你的构造函数定义在其他地方,那么你想要的就是这里

    guard_room(U, T, T);

否则,写起来可能就足够了

    guard_room(U u, T t1, T t2) : room(u, t1) {}

关于c++ - 错误: expected class-name before ‘{’ token with templates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265861/

相关文章:

c++ - 在 C 中垂直打印字节数组

c++ - 如果我在 C++ 中删除了一次数组,但分配了多次怎么办?

c++ - 如果编译器内联通过函数指针调用的函数会发生什么

c++ - 使用模板进行宏扩展

javascript - 原型(prototype)链始终打印父方法

java - 类转换异常 : Extending Log4j Logger

c++ - 具有两个间接运算符(C++)的函数参数的用途

c++ - 为枚举参数化的模板

c++ - 模板化上下文中的显式析构函数

java - 嵌套类中私有(private)构造函数的范围