使用指针引用

时间:2013-09-18 19:33:36

标签: c++ pointers

我需要在另一个函数中使用来自指针引用的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的第一行......但是,我可以改变它的作用吗? 感谢

4 个答案:

答案 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;