我需要在另一个函数中使用来自指针引用的var,所以,当我调用我传递地址值时,但是如何在那里使用这个指针(不创建另一个实例)? 查看代码段:
//Main region - using Product class -> _products = vector<Product>
int main()
{
_products.reserve(2);
for(i=0;i<2;i++)
productRefe.SetProduct(&_products);
return 0;
}
//Method in Product.cpp
void Product::SetProduct(vector<Product> *productsP)
{
vector<Product> products = *productsP;
Product productInsert;
cout << "Type the description: ";
cin >> productInsert.Struct.description;
products.push_back(productInsert);
}
void Product::GetProducts(string description, bool all, vector<Product> *productsP)
{
int i = 0;
vector<Product> products = *productsP;
if(all)
for(i = 0; i < products.size(); i++)
{
cout << "Description: " << products[i].Struct.description << endl;
cout << "Value" << products[i].Struct.value << endl << endl;
}
}
我认为问题出在方法SetProduct的第一行......但是,我可以改变它的作用吗? 感谢
答案 0 :(得分:1)
建议的替代方案:
// Declare a reference in your signature (instead of a pointer)
void Product::SetProduct(vector<Product>& products)
{
Product productInsert;
cout << "Type the description: ";
cin >> productInsert.Struct.description;
products.push_back(productInsert);
}
......或......
void Product::SetProduct(vector<Product> *productsP)
{
Product productInsert;
cout << "Type the description: ";
// Declare a pointer ... and simply use the pointer as a pointer
cin >> productInsert.Struct.description;
products->push_back(productInsert);
}
在任何情况下,您都不需要或不需要“产品” - 这是无关紧要的。只需使用您传入的变量。
恕我直言......我希望有帮助...答案 1 :(得分:1)
以上替代方案更好,但这也可以(局部变量是参考):
vector<Product> &products = *productsP;
答案 2 :(得分:1)
您的代码正在向矢量添加新产品,然后几乎立即销毁新矢量。
void Product::SetProduct(vector<Product> *productsP)
{
vector<Product> products = *productsP; // creates a new vector<Product> and copies the vector pointed to by ProductsP into it
Product productInsert;
cout << "Type the description: ";
cin >> productInsert.Struct.description;
products.push_back(productInsert); // adds the new product to the new vector<Product>
// as this function exits, products goes out of scope and is destroyed, so no change is ever saved
}
除了可以解决这个问题的其他解决方案之外,我建议将vector作为集合类的成员:
class Products
{
// other members/functions
public:
void AddProduct(const Product& prod)
{
m_Products.push_back(prod);
}
private:
std::vector<Product> m_Products;
};
或者,只使用集合本身。你发布的内容会让我相信你在课堂上混淆了一些问题。
答案 3 :(得分:0)
在函数中,不要复制,而是直接使用*productsP
,例如:
cin >> productsP->Struct.description;