C++ 没有从';w9:产品*';至';w9::列表<;w9::产品>';

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

这是我的代码,用于合并来自两个不同文件的描述和价格,并将其存储在“priceList”中。我的问题是,每当我创建一个'product'对象时,它都会给我一个错误,
从'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;