精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
最近写一个新冠预测的算法仿真项目,用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动态容器内的对象,可能引用觉得和这个规则冲突吧。