锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源社区 / error C2528: 指向引用的指针非法

服务方向

人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发

联系方式

固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

error C2528: 指向引用的指针非法

背景

最近写一个新冠预测的算法仿真项目,用C++开发,中间想让主vector里引用其它位置的对象,相当于主类有个大的vector,几百个子类对象里小的vector容器,大的vector容器里引用小的vector容器内的对象,进而可以全局访问,但是报错误:

error C2528: “pointer”: 指向引用的指针非法

参见对正在编译的类 模板 实例化“std::vector<_Ty>”的引用 

主类里代码是:

	vector<Person&> vecPsnr;
            

子类里代码是:

	void InitPeople(short n,	vector<Person&> &vPsnr,	map<unsigned long,unsigned long> &mpPsPos)

vPsnr是引用,在调用时会引用到主类的vecPsn里。引用比指针安全,所以这么用,并且根本没有出现指针,但是报了:指向引用的指针非法。

解决办法

引用是安全的访问其它范围内对象的方法,指针是不安全的访问方法,但是现在不能用,只能改成指针形式了,代码如下:

	vector<Person*> vecPsnr;            

改成这样,就不报错了。

初学者这里如果追究字面上的意思,可能就解决不了问题了。如果同时知道引用和指针,指针可以代替引用,就好解决了。所以学习要知识全面,不要觉得指针偏向C,不安全,就不用,只要在框架上安全,指针也可以用。这些问题可能是微软对英语内容翻译的问题,并不是英文原本这个意思,估计用英文的VS会有不同的理解结果。

这里另外估计还有一层意思,引用一般是要锚定到一个生命周期长久的对象上,这里vector动态容器内的对象,可能引用觉得和这个规则冲突吧。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内