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

Posted nanke_yh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了‘this’不能用于常量表达式错误(C++)问题解决相关的知识,希望对你有一定的参考价值。

目录

一、报错问题

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;

结果: 

以上是关于‘this’不能用于常量表达式错误(C++)问题解决的主要内容,如果未能解决你的问题,请参考以下文章

常量表达式的计算结果为 -1,不能缩小为类型 'char' [-Wc++11-narrowing] 错误

Visual C++ 表达式必须有一个常量值

第二章 数据类型运算符和表达式

运算符重载

C++ 类设计总结回顾------this指针

C++类体系中this指针不能改变指向吗?