‘this’不能用于常量表达式错误(C++)【问题解决】

news2024/9/24 15:19:50

目录

一、报错问题

1、代码

test.h

test.cpp

2、问题描述

二、网上解决思路

三、解决方案


                                                【元旦快乐🌹,新年快乐🎉】

        最近在编译程序时出现了“ ‘this’不能用于常量表达式错误(C ++)”的报错问题,查阅多位博主写的文章后,发现他们并没有直接给出很好的解决方案,故此我在这里将自己的问题现象以及解决方案梳理一遍。

一、报错问题

1、代码

        简单写了个测试例子:

test.h

#pragma once

#ifndef _TEST_H_
#define _TEST_H_

#include <stdlib.h>
#include <stdio.h>

class A
{
public:
    A(int nx, int ny);
    void printValue();
private:
    int width, height,num;
};
#endif // !_TEST_H_

test.cpp

#include "test.h"

A::A( int nx, int ny)
{
    width = nx;//初始化
    height = ny;
    num = width * height;
}

void A::printValue()
{
    int img[num];
    for (int i = 0; i < num; i++)
    {
        img[i] = i;
    }//简单赋值

    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            printf("value: %d\n",img[i*width+j]);
        }
    }
}

2、问题描述

        以上代码编译发生如题的报错。

         以上逻辑是在主函数中直接给类初始化,其私有成员即得到赋值,然后再使用。但是代码写出来后就是存在这样的错误,该如何处理?

二、网上解决思路

        看了网上好几篇文章,却都没有直接给出解决方案。倒是有提出是什么原因导致的问题。

博文1中指出,在C++中,类的构造方法里面调用私有变量去定义数组,而在类创建的时候调用构造方法,此时还没有加载变量,即当我们创建一个对象或变量时,直到构造函数完成初始化过程,对象或变量才能真正取得其常量属性。

博文2中提出两种方法:1、采用宏定义方法,如果采用#define来定义变量则不满足我们想要动态传递参数的功能。2、使用std::vector - std::vector - cppreference.com这个对于我们来说似乎就过于复杂和舍近求远了。

三、解决方案

        我的解决方法也比较简单,既然num是不固定数字,不可直接定义数组,那么我们在内存上创建内存呀,使用new/malloc来创建num大小的内存块,进行使用。使用完后记得释放内存即可。

        修改以上对应位置的代码:

void A::printValue()
{
    //int img[num];
    int* img = new int[num];//修改
    for (int i = 0; i < num; i++)
    {
        img[i] = i;
    }//简单赋值

    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            printf("value: %d\n",img[i*width+j]);
        }
    }
    delete[] img;
    img = NULL;
}

测试代码:

#include "test.h"

using namespace std;

int main()
{
	A a(3, 4);
	a.printValue();

	return 0;
}

结果: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql 性能优化

mysql 调优可以从这个四个方面来看 1.性能监控 1.1 show profile for query n 查看具体的sql语句各阶段执行时间 show profiles; show profile for query n; 1.2 performance schema 监控mysql 整个服务器中发生的各种事件。 performance schema 表中的数据不会持久化的磁…

一文搞定垃圾回收的三色标记法

我们之前介绍了各种常见垃圾回收器的基本原理&#xff0c;本小节我们讨论一个更深入的问题——垃圾回收器的底层是如何做的。 在并发标记的过程中&#xff0c;因为标记期间应用线程还在继续跑&#xff0c;对象间的引用可能发生变化&#xff0c;多标和漏标的情况就有可能发生。…

计算机视觉(CV)领域Transformer最新论文及资源整理分享

Transformer由论文《Attention is All You Need》提出&#xff0c;现在是谷歌云TPU推荐的参考模型。Transformer模型最早是用于机器翻译任务&#xff0c;当时达到了SOTA效果。Transformer改进了RNN最被人诟病的训练慢的缺点&#xff0c;利用self-attention机制实现快速并行。并…

梯度,GD梯度下降,SGD随机梯度下降

前言 羊了&#xff0c;但是依旧生龙活虎。补补之前落下的SGD算法&#xff0c;这个在深度学习中应用广泛。 梯度&#xff08;Gradient&#xff09; 方向导数 在梯度之前&#xff0c;非常重要一个概念&#xff1a;方向导数&#xff0c;这里uuu是nnn维向量&#xff0c;代表一个…

EMNLP 22:Bi-Directional Iterative Prompt-Tuning for Event Argument Extraction

总结 文中的前向和后向的思想可以借鉴下。 但总的来看&#xff0c;似乎是通过前向和后向来做的ensemble操作&#xff0c;虽然是在一个模型下&#xff0c;但同时前向和后向概率保证&#xff0c;可能能够使得预测更准确。 任务形式&#xff1a;event argument extraction (EAE)…

Java 读取resources下的文件+读取resource文件/路径

Java 读取resources下的文件 文档来源 三种实现方式 pom.xml <!-- commons-io io的工具包 --> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>…

SSM之Spring(二)

目录 2.3 基于注解管理bean 2.3.1 标记与扫描 2.3.2 基于注解的自动装配 三&#xff1a;AOP 3.1 场景模拟 3.1.1 声明接口 3.1.2 创建实现类 3.1.3 创建带日志功能的实现类 3.1.4 提出问题 3.2 代理模式 3.2.1 概念 3.2.2 静态代理 3.2.3 动态代理 3.2.4 测试 3.3 AO…

ElasticSearch笔记

ELASTICSEARCH笔记 1、安装elastic search dokcer中安装elastic search &#xff08;1&#xff09;下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2&#xff08;2&#xff09;配置 mkdir -p /mydata/elasticsearch/config 创建目…

Hex程序烧写到单片机

一、创建一个Keil代码工程 1、在电脑F盘&#xff08;哪个盘可以随意选择&#xff09;上创建项目工程文件夹Template 2、在Template文件中&#xff0c;创建一个main.c文件 3、进入keil主页面&#xff0c;工具栏project---->New uVision project---->选则第一步的工程文…

【数据结构】时间与空间复杂度

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、算法效率1.1 如何衡量一个算…

【华为上机真题 2022】太阳能板的最大面积

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

ArcGIS基础实验操作100例--实验27细分栅格

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验27 细分栅格 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff1a;使用…

oneblog博客系统 让你的博客实现图片显示的功能

背景 \ 闲来无事&#xff0c;希望捣腾捣腾计算机&#xff0c;玩一玩网络&#xff0c;自己搭一个博客系统。那么在家搭建一个自己的服务器&#xff0c;并且让别人通过你的博客系统与你交流。多么神奇的事情。 在搭建博客系统的过程中&#xff0c;你需要在后台写好文章。但是在上…

网赚不要当苦力,流量变现才是王道

事实上&#xff0c;大多数互联网从业者脑子里只想到一件事。无脑搬砖一个月挣一万多元。不可否认&#xff0c;有这样的副业&#xff0c;但也需要前提条件。你需要在早期阶段努力工作&#xff0c;然后才能分批赚钱。这是两个概念&#xff0c;一开始就听话。 我从来不建议你做那…

leetcode 155. 最小栈-java题解

题目所属分类 辅助栈 或者一个栈 原题链接 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部…

关于gets()与scanf()输入字符串与\0,\n,空格之间的问题

我们都知道输入字符串的话&#xff0c;用gets()函数与scanf()加%s的话都是可以的。同时&#xff0c;一个字符串的结尾默认有一个\0也是老生常谈。 空格 gets() 1. 当gets()碰到空格时就把它当成一个普通的字符来看&#xff0c;没有任何特殊之处可言。 scanf() 1. 如果再输入…

【自学Python】Python特点

Python特点 Python特点教程 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&#xff0c;相比其他语言经常使用英文关键字&#xff0c;其他语言的一些标点符号&#xff0c;它具有比其他语言更有特色语法结构。 Py…

计算机组成原理实验——一、ALU实验

一、实验目的 1.掌握ALU模块的组成和接口&#xff0c;理解ALU的功 能。 2.通过编程调用ALU模块计算斐波那契数。 3.掌握Verilog中多模块编程方法和实现。 二、实验内容 用 Verilog 设计一个算术运算单元 ALU&#xff0c;采 用纯组合逻辑设计&#xff0c;32bit 宽。 利用该 …

2022(终)最后一篇博客—继承和多态

目录 文章目录 一、继承 1.1为什么要继承 1.2继承概念 1.3继承的语法 1.4成员访问 1.5方法访问 1.6初始化代码块 1.7继承方式 二、多态 1.1多态的概念 1.2多态实现条件 1.3动态绑定与静态绑定 1.4向上转型与向下转型 1.5多态的优缺点 1.6需要注意的地方&#x…

【王道操作系统】1.1.2 操作系统的特征(并发、共享、虚拟、异步)

操作系统的特征(并发、共享、虚拟、异步) 文章目录操作系统的特征(并发、共享、虚拟、异步)1.操作系统特征&#xff1a;并发2.操作系统特征&#xff1a;共享3.操作系统特征&#xff1a;虚拟4.操作系统特征&#xff1a;异步操作系统是一种系统软件&#xff0c;但与其它系统软件和…