为何无法访问C++代码中vector<veiculos*>类型的carros容器?
排查:无法访问
vector<veiculos*>容器的原因 让我帮你一步步拆解问题,你的代码里有几个明确的问题导致你没法正常访问carros容器:
最直接的语法错误:无效的容器索引写法
你代码里的cout << carros[].placa;完全不符合C++语法:[]运算符必须传入一个有效的整数索引,比如刚添加元素后,容器最后一个元素的索引是carros.size() - 1;carros存储的是veiculos*类型的指针,不是对象实例,所以访问成员必须用->,而不是.。
把这行改成下面这样就能正常输出刚添加的车辆牌照了:
// 用容器的size()获取最后一个元素的索引 cout << carros[carros.size() - 1]->placa; // 或者用你维护的tam变量(注意这里要先输出再自增tam) cout << carros[tam]->placa; tam++;你误以为"无法访问容器"的本质
其实carros是全局变量,在insereVeiculos函数里是可以直接访问的,只是前面的语法错误导致编译失败,让你误以为容器不可访问。只要修正语法,就能正常操作这个容器。额外的潜在问题提醒
- 内存泄漏:你用
new创建了veiculos对象,但全程没有对应的delete操作,程序结束时会造成内存泄漏。建议后续改用std::unique_ptr<veiculos>这类智能指针来自动管理内存,避免手动释放的麻烦。 - 后续
inseremultas函数的访问逻辑:如果要给车辆添加违章记录,记得carros里的元素是指针,访问multas容器时也要用->,比如carros[i]->multas.push_back(new multa);(同样要注意后续的内存释放)。
- 内存泄漏:你用
内容的提问来源于stack exchange,提问作者Thiago Moreira
相关产品推荐
相关产品推荐

