如何使用vector、for循环和unique_ptr创建对象,对应代码报错如何解决?
代码错误点
- 未声明存储目标对象的
vector容器,代码中的auto FZ[i]属于非法语法:C++不支持运行时用auto声明可变长度数组,和你要实现的vector存储需求完全不符 push_back是vector的成员方法,不能直接用智能指针对象/数组元素调用,调用逻辑错误- 重复调用
make_unique创建对象,操作冗余 make_unique调用缺少构造函数的括号,语法错误- 手动加
std::move多余:make_unique返回值本身是右值,push_back时会自动触发移动语义
修正后可运行代码
#include <vector> #include <memory> #include <iostream> #include <string> // 需提前定义Fahrzeug类,此处为示例实现 class Fahrzeug { public: std::string p_sName; }; void vAufgabe_1a() { const int num_obj = 3; // 声明存储unique_ptr<Fahrzeug>的vector std::vector<std::unique_ptr<Fahrzeug>> FZ; FZ.reserve(num_obj); for (int i = 0; i < num_obj; ++i) { FZ.push_back(std::make_unique<Fahrzeug>()); std::cout << "Der Name des Fahrzeugs: " << std::endl; std::cin >> FZ[i]->p_sName; } }
补充说明
std::unique_ptr是独占所有权的智能指针,不支持拷贝操作,往vector中插入时只能通过移动构造完成,std::make_unique返回的右值天然满足该要求,不需要额外处理。
内容的提问来源于stack exchange,提问作者Yağmur Yıldız
相关产品推荐
相关产品推荐

