0

我需要在另一个函数中使用来自指针引用的 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

4 回答 4

1

上述替代方案更好,但这也可以(局部变量是参考): vector<Product> &products = *productsP;

于 2013-09-18T19:40:09.193 回答
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);
}

在这两种情况下,您都不需要或想要“产品”——它是无关紧要的。只需使用您传入的变量。

恕我直言......我希望这会有所帮助......

于 2013-09-18T19:37:12.967 回答
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
}

除了可以解决此问题的其他解决方案之外,我建议将向量设为集合类的成员:

class Products
{
// other members/functions
public:
    void AddProduct(const Product& prod)
    {
        m_Products.push_back(prod);
    }
private:
    std::vector<Product> m_Products;
};

或者,仅使用集合本身。你发布的内容会让我相信你在课堂上混淆了关注点。

于 2013-09-18T19:57:41.243 回答
0

在函数中,不要复制,*productsP直接使用,例如:

cin >> productsP->Struct.description;
于 2013-09-18T19:37:42.943 回答