2017-02-22 81 views
-1

我是新來的C++,並且在編寫該函數的代碼時遇到了麻煩。我只是需要它將ID,名稱,產品描述,價格和數量等產品價值存儲到矢量庫存中。如何爲此addProduct函數編寫implmentation代碼

Store.hpp

#ifndef STORE_HPP 

#define STORE_HPP 
class Product; 
class Customer; 
#include<string> 

#include "Customer.hpp" 
#include "Product.hpp" 

class Store 
{ 
private: 
    std::vector<Product*> inventory; 
    std::vector<Customer*> members; 

public: 
    void addProduct(Product* p); 
    void addMember(Customer* c); 
    Product* getProductFromID(std::string); 
    Customer* getMemberFromID(std::string); 
    void productSearch(std::string str); 
    void addProductToMemberCart(std::string pID, std::string mID); 
    void checkOutMember(std::string mID); 
}; 

#endif 

我試圖把它寫這種方式。我知道這是錯誤的,請幫助我。

在此先感謝

void Store::addProduct(Product* p) 
{ 
    Product* p(std::string id, std::string t, std::string d, double p, int qa); 
    inventory.push_back(p); 
} 
+0

您似乎對什麼是指針以及何時使用指針感到困惑。請先清理一下。 'addProduct'成員函數已經接收到一個指向'Product'類的實例的指針,爲什麼你要使用構造函數,並且你在哪裏期待'id'等信息來自哪裏? – riodoro1

+0

但我得到一個錯誤,說[錯誤]沒有匹配函數調用'std :: vector :: push_back(Product *(&)(std :: string,std :: string,std :: string,double,int ))' – user1210000

+0

@ riodoro1請告訴我如何寫代碼存儲在載體 – user1210000

回答

0

您可以用p指針傳遞一個完整的對象,並將其推到向量,它會看起來是一樣的,但沒有串Product* p(std::string id, std::string t, std::string d, double p, int qa);你也可以創建你的產品的副本,如果你有一個拷貝構造函數,這種方法是有效的。

void Store::addProduct(Product* p) 
{ 

    Product* copyOfP = new Product(*p); 
    inventory.push_back(copyOfP); 
} 

或者其他沒有很好的辦法: 無效商店:: addProduct命令(產品* P) {

Product* copyOfP = new Product(p->getId(), p->getT(), p->getD, ...); 
    inventory.push_back(copyOfP); 
} 

如果選擇拷貝一個變種 - 不要忘記手動刪除它們在Store的析構函數中。

0

您的代碼

void Store::addProduct(Product* p) 
{ 
    Product* p(std::string id, std::string t, std::string d, double p, int qa); 
    inventory.push_back(p); 
} 

可能會發出一個警告 - 你已經重新聲明形式參數p

Product* p(std::string id, std::string t, std::string d, double p, int qa); 

看起來像一個函數聲明的東西返回一個指針到Product。你在給函數發送Product指針,所以只需要使用:

void Store::addProduct(Product* p) 
{ 
    inventory.push_back(p); 
} 

您正在嘗試的push_back功能p - 不要忽視警告。

+0

謝謝你們的工作 – user1210000