没有从'w9::Product *'到'w9::List<w9::Product>'的可行转换



这是我的代码,用于合并两个不同文件的描述和价格并将其存储在"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()而不是+=来附加对象(。

相关内容

  • 没有找到相关文章

最新更新