我正在尝试创建一个简单的基类和另一个继承它的类。我收到以下错误。
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/