2014-12-20 26 views
-1

這是我的代碼,用於合併來自兩個不同文件的描述和價格並將其存儲在'priceList'中。我的問題是,每當我製作一個'產品'的對象,它給我錯誤no viable conversion from 'w9::Product *' to 'w9::List<w9::Product>沒有可行的從'w9 :: Product *'轉換爲'w9 ::列表<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是一個類模板,所以我認爲typename T是std :: unique_ptr,我不允許更改我的頭文件中包含List和Pro的代碼風管,描述和價格。

回答

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

非常感謝。我在開始時嘗試使用w9 :: Product,並意識到不使用'*'的巨大差異。此外,我嘗試了兩個,但是當我使用unique_ptr時,它不允許我將產品添加到我的priceList。但第一個是有效的。 TY – user2853311

0

C++不是C#或Java:你可以創建沒有new的對象。例如:

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

(我不知道怎麼作品; std::list<w9::Product>將使用的push_back()代替+=追加的對象)。

相關問題