C++ 没有从';w9:产品*';至';w9::列表<;w9::产品>';
这是我的代码,用于合并来自两个不同文件的描述和价格,并将其存储在“priceList”中。我的问题是,每当我创建一个'product'对象时,它都会给我一个错误,C++ 没有从';w9:产品*';至';w9::列表<;w9::产品>';,c++,c++11,smart-pointers,C++,C++11,Smart Pointers,这是我的代码,用于合并来自两个不同文件的描述和价格,并将其存储在“priceList”中。我的问题是,每当我创建一个'product'对象时,它都会给我一个错误,从'w9::product*'到'w9::List没有可行的转换 我试着做std::unique_ptr product(新的w9::product(desc[I].desc,price[j].price)) 但它不会让我将产品添加到价格表中,因为它会说没有可行的重载+= w9::List<w9::Product> merg
从'w9::product*'到'w9::List
没有可行的转换
我试着做std::unique_ptr product(新的w9::product(desc[I].desc,price[j].price))代码>
但它不会让我将产品添加到价格表中,因为它会说没有可行的重载+=
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;
}
此外,List是一个类模板,因此我假设typename T是std::unique\u ptr,并且我不允许更改头文件中的代码,头文件包括List和Product、Description和Price。您混淆了您的类型:
w9::List<w9::Product> product = new w9::Product(desc[i].desc, price[j].price);
但是你说你需要一个唯一的\u ptr
,所以真的:
std::unique_ptr<w9::Product> product(new w9::Product(desc[i].desc, price[j].price));
productList += std::move(product);
std::unique_ptr product(新的w9::product(desc[i].desc,price[j].price));
productList+=标准::移动(产品);
或者只是暂时避免:
productList += std::unique_ptr<w9::Product>(
new w9::Product(desc[i].desc, price[j].price));
productList+=std::unique\u ptr(
新的w9::产品(desc[i].desc,price[j].price));
C++不是C#或Java:您创建对象时没有新建
。例如:
w9::Product product(desc[i].desc, price[j].price);
priceList += product;
(我不知道w9::List
如何工作;std::List
将使用push_back()
而不是+=
来附加对象)。非常感谢。我在一开始尝试使用w9::Product,并意识到不使用“*”的巨大区别。此外,我尝试了这两种方法,但当我使用unique_ptr时,它不允许我将产品添加到价格表中。但第一个有效。泰
productList += std::unique_ptr<w9::Product>(
new w9::Product(desc[i].desc, price[j].price));
w9::Product product(desc[i].desc, price[j].price);
priceList += product;