无法从'w9 :: Product *'转换为'w9 :: List <w9 :: product>'</w9 :: product>

时间:2014-12-20 23:30:15

标签: c++ c++11 smart-pointers

这是我的代码,用于合并来自两个不同文件的描述和价格,并将其存储在'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));

但我不会将产品添加到priceList,因为它显示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是一个类模板,所以我假设typename T是std :: unique_ptr,我不允许更改我的头文件中的代码,其中包括List和Product,Description和Price。

2 个答案:

答案 0 :(得分:0)

您正在混淆您的类型:

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));

答案 1 :(得分:0)

C ++不是C#或Java:您创建没有new的对象。例如:

w9::Product product(desc[i].desc, price[j].price);
priceList += product;

(我不知道w9::List如何运作; std::list<w9::Product>会使用push_back()代替+=来追加对象。)