C++的结构体指针中出错:表达式必须是可修改的左值_最后发现解决方法很简单

Posted avi9111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++的结构体指针中出错:表达式必须是可修改的左值_最后发现解决方法很简单相关的知识,希望对你有一定的参考价值。

本来用指针用的好好的

一直以来(用了2个星期c++),类里直接写类指针,直接初始化没啥问题

private:
	//D3D类
	D3DClass* mD3D;
mD3D = new D3DClass*

结果今天要做数据转换,必须是结构体(也有好处,比类要写头文件,CPP文件写2个文件多类啊,结构体也容易理解一点),结果就拉风了,死活说不可修改的左值


public:
    FrameBufferType* lastBuffer;

上网搜了一下,可能的解决方案包括

1.指针赋值

int * p ;

p = (int *) 4;

p* = *xxx;

首先,且不说实战中你根本不会用int,而是

其次,我是真见过一个名牌大学生写这么“复杂的”代码

2.左值赋值

等号左边是左值,右边是右值,左边需要是变量,

1 = x;//这样肯定提示左值不可修改

我想,只要读过小学的都不会说出这样的干话吧,

上CSDN的人,都聪明人,肯定是要初始化变量,用变量储存一些数据

3.结构体的初始化应该这样初始化

当然,上面的截图貌似没有初始化问题,反而又是另一个问题

字符数组不能用“=”赋值给另一数组,即name=str是不行的。

不确定是不是我用 visulstudio编译的原因,

如果我们按这么写,即使没有数组问题,第一行初始化都编译不过的,提示的是:

使用了未被初始化的变量

本来不想展开说,但特么用了C++两个星期,首先发现2个重要问题

1.各种include异常,找不到文件(分开头文件和CPP惹得锅)

2.最简单的指针(反射)判断都做不到,编译必须从上到下编译(也无法避免各种宏翻转)

好吧,这些都不重要,c++快啊,功能强大啊,编程思想啊

(40年前肯定比C好才创造出来的,还叫c plus plus ,一般都叫A+,它也有先见之名,叫++)

但我就想问问,

1.要字串没字串

2.要数组没数组(上面截图不是明摆着么)

3.各种指针也不确定是有赋值还是没赋值

到底C++能干啥

夸平台啊,25%的程序员都在用,世界第一语言

(我听到的是,此地无银三百两)

4.尝试了以下3个方法,却不成功

	//1.使用了未初始化的局部变量 's'
	//FrameBufferType* s;
	//s->View = matrixPtr->View;
	// 2.可以的分配??
	//lastBuffer = malloc(sizeof(struct FrameBufferType));
    //3.局部变量确实可以(cpp内局部)
	//FrameBufferType* xx = (struct FrameBufferType*)malloc(sizeof(struct FrameBufferType));
	

其实,解决有3个线索

指针可以赋值

地址可以赋值

const指针不能改变,因为const就是不能改变(const 又是一个我不知道为什么要存在的东西,40年前的386电脑,内存不够,必须用const限定?写程序这么多年,发现限定除了发挥限定本身的作用,对效率,整体运行,对团队协作,对扩展开发等等其他功能根本是影响,鸡肋,是对const最贴切的评价)

5.最后突然发现,原来这么简单

class FrameCBuffer : public CBuffer

	FrameBufferType* lastBuffer = new FrameBufferType;

只要给个默认值,只能在头文件默认,

确实应该在头文件声明结构指针,应该编译的逻辑判断同const............

遗留问题

  • 会不会占用内存
  • 编译会不会变慢
  • 包体会增加嘛

网上很多牛人吐槽都在等编译,边喝咖啡边等编译,半天都在看书+编译,看来每个人都认为是错的东西,一般对不了

以上是关于C++的结构体指针中出错:表达式必须是可修改的左值_最后发现解决方法很简单的主要内容,如果未能解决你的问题,请参考以下文章

C++ 表达式必须是可修改的左值

错误:表达式必须是可修改的左值

表达式必须是结构指针上的可修改左值

表达式必须是可修改的左值(字符数组)

C 错误:表达式必须是可修改的左值

为啥我得到的表达式必须是可修改的左值?