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