error: must use ‘class’ tag to refer to type ‘XXX’ in this scope
开发环境: Qt Creator 4.8.2
在写程序的时候,遇到了编译器报错
error: must use ‘class’ tag to refer to type ‘XXX’ in this scope
出错的代码部分如下:
Iterator* ConcreteAggregate::ConcreteIteratorDesc()
{
return new ConcreteIteratorDesc(this); //error: must use 'class' tag to refer to type 'ConcreteIteratorDesc' in this scope
}
根据提示,修改代码如下后,编译器错误消失
Iterator* ConcreteAggregate::ConcreteIteratorDesc()
{
// return new ConcreteIteratorDesc(this);
return new class ConcreteIteratorDesc(this);
}
经过排查,终于发现了这个错误的原因,首先定义了一个抽象类及其子类
class Aggregate
{
public:
virtual Iterator* CreateIterator() = 0;
virtual Iterator* ConcreteIteratorDesc() = 0;
virtual vector<object>* GetVector() = 0;
};
//定义一个具体的聚合类
class ConcreteAggregate : public Aggregate
{
public:
ConcreteAggregate();
~ConcreteAggregate();
Iterator* CreateIterator() override;
Iterator* ConcreteIteratorDesc() override;
int GetCount() const;
vector<object>* GetVector() override;
object GetElement(int index);
private:
vector<object>* items;
};
然后又定义了一个类
//实现从前向后的迭代器
class ConcreteIterator : public Iterator
{
public:
//初始化时将具体的聚合对象传入
ConcreteIterator(Aggregate* aggregate);
object First() override;
object Next() override;
object CurrentItem() override;
bool IsDone() override;
private:
ConcreteAggregate* m_aggregate; //定义了一个具体聚集对象
int current;
};
注意看可以发现,新定义的类名为ConcreteIterator,而Aggregate类中有同名的函数
virtual Iterator* ConcreteIteratorDesc() = 0;
在实现子类ConcreteAggregate的ConcreteIteratorDesc()函数时,编译器报错
Iterator* ConcreteAggregate::ConcreteIteratorDesc()
{
return new ConcreteIteratorDesc(this);
// return new class ConcreteIteratorDesc(this);
}
解决方案:
- 一种解决办法是在类前面加class,告诉编译器,调用关键字的位置是一个类
Iterator* ConcreteAggregate::ConcreteIteratorDesc()
{
return new class ConcreteIteratorDesc(this);
}
- 另一种解决办法就是更换关键字
参考资料:
1 https://blog.csdn.net/fjjaylz/article/details/88744885 关于C++中class关键字的一种特别使用情况
error: must use ‘class’ tag to refer to type ‘XXX’ in this scope的更多相关文章
- ERROR 1045 (28000): Access denied for user xxx & ERROR 1449 (HY000): The user specified as a definer xxx does not exists
今天在一个修改过权限的MySQL数据库遇到了"ERROR 1045 (28000): Access denied for user 'xxx'@'xxx.xxx.xxx.xxx' (usin ...
- ERROR 1526 (HY000): Table has no partition for value xxx
最近,我们有些功能需要使用到基于多个字段的分区,需要同时支持oracle/mysql,但是开发人员又希望尽可能少的改动业务代码,也不愿意使用多列分区,在oracle 11g之前,不支持多列分区(12. ...
- Remote error: VAR and OUT arguments must match parameter type exactly'
在XE10中 downloadfile(filename: string; out FileStream: TStream; out FileSize: int64)是没有问题的,升级到delphi ...
- 报错:OpenCV Error: Assertion failed (src.size() == dst.size() && src.type() == dst.ty pe()) in unknown function, file ..……
在用cvDilate函数的时候,老是导致程序中断,报错如下: OpenCV Error: Assertion failed (src.size() == dst.size() && s ...
- linux下mysql启动 Starting MySQL. ERROR! The server quit without updating PID file(xxx/x.pid)
service mysql start 报错: Starting MySQL. ERROR! The server quit without updating PID file(xxx/x.pid) ...
- MySQL数据库插入数据出现 ERROR 1526 (HY000): Table has no partition for value xxx
MySQL数据库插入数据出现ERROR 1526 (HY000): Table has no partition for value xxx工作的时候发现无法插入数据,报错:ERROR 1526 (H ...
- org.apache.xmlbeans.XmlException: error: does not close tag
使用myeclipse的jax自动生成webservice , 或者serviceImpl通过@webservice来实现webservice时, 使用soap UI (我测试使用的版本 5.2.1) ...
- 【c++错误】类的语法错误 error c2533:constructors not allowed a return type(构造函数不允许返回一个类型)
今天编写类的程序的时候不小心把类后的分号忘写了,就出现上面的错误提示. 顺便复习下类的正确格式: class 类名 { public: //习惯上将公有类型放在前面,便于阅读 ……(外部接口) pro ...
- Activation error occured while trying to get instance of type Database,key ""之Oracle
我在发布web项目时好几次好遇到这个问题,查看了别人的说法,感觉还是不能解决,后来发现在发布时bin里面有dll没有打包到发布文件的bin目录中,而这些dll又是在连接Oracle(我选择的Oracl ...
随机推荐
- 3D Computer Grapihcs Using OpenGL - 05 EBO
本节将采用两种方法绘制两个三角形. 先看第一种方法的代码 MyGlWindow.cpp #include <gl\glew.h> #include "MyGlWindow.h&q ...
- Oracle传输数据到Sqlserver
通过Sqlserver的SSIS工具实现数据传输
- 大数据笔记(三)——Hadoop2.0的安装与配置
一.Hadoop安装部署的预备条件 准备:1.安装Linux和JDK. 安装JDK 解压:tar -zxvf jdk-8u144-linux-x64.tar.gz -C ~/training/ 设置环 ...
- 关于跨域踩的坑,浏览器 status code为200,但实际上是跨域了
背景 后端使用Nginx并更改本地host文件,起本地服务.将aaa.bbbb.com代理至本地IP地址(10.26.36.156).使用$.ajax调用后端restful接口,要求content-t ...
- 状压dp(8.8上午)
神马是状态压缩? 就是当普通dp的每一维表示的状态非常少的时候,可以压缩成一维来表示 如果m==8 dp[i][0/1][0/1]......[0/1] 压缩一下 dp[i][s]表示到了第i行,状态 ...
- linux的find和grep区别?
为什么会把 grep和find 这两个命令拿在一起来讨论? 是因为他们之间有一个容易混淆的地方, [在我的记忆中] : -name ? 它是find的选项! 不是grep的选项! 实际上, find基 ...
- java 操作hdfs(连接HDFS)
FileSystem fs = null; Configuration conf = null; @Before public void init() throws Exception{ conf = ...
- 001-spring boot概述与课程概要
一.Spring Boot介绍 Spring Boot的目的在于创建和启动新的基于spring框架的项目.Spring boot会选择最适合的Spring 子项目和第三方开源库进行整合.大部分Spri ...
- 机器学习--如何将NLP应用到深度学习(3)
数据收集以后,我们下面接着要干的事情是如何将文本转换为神经网络能够识别的东西. 词向量 作为自然语言,只有被数学化才能够被计算机认识和计算.数学化的方法有很多,最简单的方法是为每个词分配一个编号, ...
- ntp局域网时间同步操作
需求:局域网里面有两台电脑需要同步时间 一台windows,一台Linux.把windows当作服务器 windows10自带ntp服务器,可以按如下步骤进行设置 1. 打开注册表编辑器,在运行里面输 ...