我是c ++的新手,我在编写该函数的代码时遇到了麻烦。我只需要将产品价值,产品名称,产品描述,价格和数量存储到矢量库存中。
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 :(得分: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);
}
或另一种不太好的方式: void Store :: addProduct(Product * p) {
Product* copyOfP = new Product(p->getId(), p->getT(), p->getD, ... );
inventory.push_back(copyOfP);
}
如果您选择带副本的变体 - 请勿忘记在Store的析构函数中手动删除它们。
答案 1 :(得分: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);
}
您正在尝试推送函数p
- 不要忽略警告。