错误:模板中的“{”标记之前的预期类名
error: expected class-name before ‘{’ token with templates
本文关键字:错误 更新时间:2023-10-16
我正在尝试创建一个简单的基类和另一个继承自它的类。我收到以下错误。
guard_room.h:17:1: error: expected class-name before ‘{’ token
看过其他帖子,似乎我在某处有一个循环依赖,但我已经做了我所阅读的一切来解决它。这是我的课程
基班房间.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
我也完全困惑于我需要将基室类的包含放在我继承的类中的位置。 感谢您对此的帮助。
首先,派生类需要能够看到基类的整个定义 - 您需要在派生类文件的顶部包含标头。 (基类扩展派生类,因此基类在很大程度上是派生类的一部分)
此外,room 是模板而不是类 - 您只能从具体类继承,因此您需要指定模板参数。 即
#include "room.h"
template <typename U, typename T>
class guard_room : public room<U, T>
最后 - 您的.tem
文件是否也包含标头保护? (如果没有,你也需要这些以避免其他编译器错误)
另外,请注意,初始化器列表是构造函数定义的一部分,因此以下内容无效
guard_room(U, T, T) : room(U, T);
如果你的构造函数定义在别处,那么你在这里想要的只是
guard_room(U, T, T);
否则,可能只需编写
guard_room(U u, T t1, T t2) : room(u, t1) {}
您在此处提供了构造函数的一半实现
//overloaded constructor
guard_room(U, T, T) : room(U, T);
如果希望实现是内联的,则还必须添加构造函数主体。
//overloaded constructor
guard_room(U, T, T) : room<U, T>()
{ }
当构造函数的实现也包含在标头末尾的.tem
文件中时(如注释中所示),真正的解决方案是从构造函数声明中删除对基类的引用,并将其留给单独的定义。
//overloaded constructor
guard_room(U, T, T);
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'