C++ 在 标记之前期望类名,继承错误
Posted
技术标签:
【中文标题】C++ 在 标记之前期望类名,继承错误【英文标题】:C++ expected class-name before token, an inheritance errorC++ 在 标记之前期望类名,继承错误 【发布时间】:2017-12-05 12:36:38 【问题描述】:KSetBase.h 基类,一个接口
#ifndef HW6_GTUSETBASE_H
#define HW6_GTUSETBASE_H
class KSet;
#include <cstddef>
namespace TU
template<typename T>
class KSetBase
public:
virtual bool empty() const = 0;
virtual size_t size() const = 0; //int is not okay since unsigned also could be in.
//comparisons would be not working if that was case
//detailed
//https://***.com/questions/1181079/stringsize-type-instead-of-int
virtual size_t max_size() const = 0;
virtual void insert(T first, T second) = 0; //cift dondurmesi gerekli
virtual void erase(T deleter) = 0;
virtual void clear() = 0;
virtual T find(T deneme) = 0;
virtual size_t count(T testle) = 0;
virtual T begin() = 0;
virtual T end() = 0;
protected:
~GTUSetBase()
//do nothing
;
#endif //HW6_GTUSETBASE_H
KSet.h(派生类)
#include "KSetBase.h"
#ifndef HW6_GTUSET_H
#define HW6_GTUSET_H
#include <memory>
using namespace std;
namespace TU
template<typename T>
class KSet : public KSetBase
public:
bool empty() const;
size_t size() const;
size_t max_size() const;
void insert(T first);
void erase(T deleter);
void clear();
T find(T deneme);
size_t count(T testle);
T begin();
T end();
protected:
int hmany = 0;
shared_ptr<T> set_harmony;
;
#endif //HW6_GTUSET_H
我无法弄清楚我的代码的哪一部分是错误的。我基本上从接口类中做了一个基本的继承,我在 KSet.cpp 中实现了所有功能。理论上看起来没什么问题,但它给出了 2 个错误。
在 main.cpp 和 KSet.cpp 中
class KSet : public KSetBase
错误线是这样的。
我检查了#ifndef 和#defines,我考虑过使用前向声明,但我似乎无法解决这个问题。我真的被这个问题困住了。我搜索了整个网络,最后总是在语法或可见的东西上出现大错误,但我无法弄清楚我的。这是非常简短的代码。
【问题讨论】:
KSetBase
是一个类template,模板不能被继承。您只能从具体类(或struct
)继承。 KSetBase<T>
是一个具体的类。
您是说: public KSetBase<T>
吗?
在不相关的注释中,即使 KSetBase
析构函数没有做任何事情,您仍然应该使用 virtual
。
我不应该使用默认析构函数吗?
可能(关于default
构造函数),但仍应标记为virtual
。
【参考方案1】:
KSetBase
是一个模板类,如果你从它继承你必须指定一个模板参数:
template<typename T>
class KSet : public KSetBase<T>
此外,您似乎在基类析构函数中有错字。
【讨论】:
哇,这是我犯的错误,非常感谢你。有趣的是,即使像 C-Lion 这样的逻辑 IDE 似乎也无法找出这个错误。以上是关于C++ 在 标记之前期望类名,继承错误的主要内容,如果未能解决你的问题,请参考以下文章