这是我的代码,用于合并两个不同文件的描述和价格并将其存储在"priceList"中。我的问题是,每当我制作"产品"对象时,它都会给我no viable conversion from 'w9::Product *' to 'w9::List<w9::Product>
错误。
我试着做std::unique_ptr<w9::Product> product (new w9::Product(desc[i].desc, price[j].price));
但我不会像它所说的那样将产品添加到价格列表中no viable overloaded +=
w9::List<w9::Product> merge(const w9::List<w9::Description>& desc,
const w9::List<w9::Price>& price) {
w9::List<w9::Product> priceList;
for(int i = 0; i < desc.size(); i++) {
for(int j = 0; j < price.size(); j++) {
if(price[j].code == desc[i].code) {
w9::List<w9::Product> product = new w9::Product(desc[i].desc,
price[j].price);
priceList += product;
}
}
}
return priceList;
}
输出应该是这样的:
Code Description
4662 tomatoes
4039 cucumbers
4056 brocolli
4067 lemons
4068 oranges
Code Price
4067 0.99
4068 0.67
4039 1.99
4056 2.49
Description Price
cucumbers 1.99
brocolli 2.49
lemons 0.99
oranges 0.67
此外,List 是一个类模板,所以我假设类型名 T 是 std::unique_ptr,并且不允许我更改包含列表和产品、描述和价格的头文件中的代码。
你混淆了你的类型:
w9::List<w9::Product> product = new w9::Product(desc[i].desc, price[j].price);
右侧是一个w9::Product*
,所以你必须把它分配给一个指针:
w9::Product* product = new w9::Product(desc[i].desc, price[j].price);
但是你说你需要一个unique_ptr
,所以真的:
std::unique_ptr<w9::Product> product(new w9::Product(desc[i].desc, price[j].price));
productList += std::move(product);
或者只是避免暂时的:
productList += std::unique_ptr<w9::Product>(
new w9::Product(desc[i].desc, price[j].price));
C++不是C#或Java:创建对象时没有new
。例如:
w9::Product product(desc[i].desc, price[j].price);
priceList += product;
(我不知道w9::List
是如何工作的; std::list<w9::Product>
将使用push_back()
而不是+=
来附加对象(。