函数调用不起作用,矢量访问数据

function call doesn't work and vector access data

本文关键字:访问 数据 不起作用 函数调用      更新时间:2023-10-16

,所以我想执行使用类项目的向量的库存程序。到目前为止,我的代码看起来像这样:

#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Item{
private:
  string month;
  string name;
  float volume;
  float sales;
public:
  void print();
  void print2();
  void sale();
  void report();
  void getdata();
  void setname (string itemname){name=itemname;}
  void setID(int setID){ID=setID;}
};
void Item::print(){
  cout<<"Name    : "<<name<<endl;
  cout<<"ID      : "<<ID<<endl;
}
void Item::print2(){
  vector<Item>*::iterator i;
    for (i=list.begin(); i !=list.end(); ++i){
      i->print();
  }
/*void Item::sale(){
  vector<Item> }
void Item::report(){
}*/
void Item::getdata(){
  vector<Item> items;
  string name;
  int ID;
  Item *a;
  for (int n=0; n<2; n++){
    cout<<"Enter name:"<<endl;
    getline(cin, name);
    cout<<"Enter ID: "<<endl;
    cin>>ID;
    a = new Item;
    a->setname(name);
    a->setID(ID);
    items.push_back(*a);
    cin.get();
  }
}
int main(){
  cout<<"0. Exit n1. Item Sale n2. Daily Report n3. Weekly Check n4. Monthly Update n5. Load Inventory File n6. S
ort file by Key n7. Save inventory to a file n8. Add a New Item n9. Edit an Item n10. Delete an itemn";
  int x;
  cin>>x;
  switch(x){
  case 0:
    exit(0);
    break;
  case 1:
    sale();
    break;
  case 2:
    break;
  case 8:
    getdata();
    break;
  default:
    cout<<"Wrong choice!n";
    break;
  }

该程序未编译,因为getdata()在情况下没有调用该函数,为什么?另一个问题是,如果我将数据存储在getData()函数中,该如何通过取消给出其他函数中的数据向量数据?

我建议将您的对象设计分为两个部分:一个代表一个项目,一个代表库存。

项目:

class Item
{
public:
  void print() const;
  void sale();
  void report();
  void setname (string itemname){name=itemname;}
  void setID(int setID){ID=setID;}
private:
  string month;
  string name;
  int ID;
  float volume;
  float sales;
};
void Item::print() const
{
  cout<<"Name    : "<<name<<endl;
  cout<<"ID      : "<<ID<<endl;
}

库存:

class Inventory
{
public:
  void print() const;
  void report();
  void getdata();
private:
  std::vector<Item> items;
};
void Inventory::print() const
{  
  for (
    vector<Item>::const_iterator iter = list.begin();
    iter != items.end();
    ++iter)
  {
      iter->print();
  }
}

void Inventory::getdata()
{
  string name;
  int ID;
  for (int n=0; n<2; n++)
  {
    cout<<"Enter name:"<<endl;
    getline(cin, name);
    cout<<"Enter ID: "<<endl;
    cin>>ID;
    Item item;
    item.setname(name);
    item.setID(id);
    items.push_back(item);
    cin.get();
  }
}

这就是您的主要外观:

int main()
{
  Inventory inventory;
  cout
      << "0. Exit n"
      << "1. Item Sale n"
      << "2. Daily Report n"
      << "3. Weekly Check n"
      << "4. Monthly Update n"
      << "5. Load Inventory File n"
      << "6. Sort file by Key n"
      << "7. Save inventory to a file n"
      << "8. Add a New Item n"
      << "9. Edit an Item n"
      << "10. Delete an itemn";
  int x;
  cin>>x;
  switch(x)
  {
  case 0:
    exit(0);
    break;
  case 1:
    sale();
    break;
  case 2:
    inventory.report();
    break;
  case 8:
    inventory.getdata();
    break;
  default:
    cout<<"Wrong choice!n";
    break;
  }
}

请注意,您需要类的对象才能调用成员函数。getdata()没有任何作用的对象。

编辑:您问:"例如,您将如何通过向量迭代以查找特定ID?"

我们已经看到如何迭代每个成员的打印。我们真正需要做的就是有时只能致电打印。

首先,您需要一种说明项目ID的方法。在项目中添加setID(...)之后:

int getID() const {return ID;}

现在您可以在迭代时检查此值:

void Inventory::find
(
  const int ID_
) const
{
  bool found = false;
  for (
    vector<Item>::const_iterator iter = items.begin();
    iter != items.end();
    ++iter)
  {
    if (iter->getID() == ID_)
    {
      cout << "Found item " << ID_ << ": n";
      iter->print();
      found = true;
    }
  }
  if (!found)
  {
    cout << "No items matching " << ID_ << " found." << endl;
  }
}

您可以在此处看到一个工作示例:http://codepad.org/w1mwgcyo

您需要修复OOP的基础知识。您没有在类项目的主体中创建对象。没有这个,您将无法调用公共成员功能。

一个人只能在不创建类的对象的情况下调用静态成员函数。

其次,在成员函数中创建类本身的向量是疯狂的。如果需要的话,请在班级之外进行。

类定义一个实例的属性和行为。如果您希望创建实例的数组/向量,则必须在类外部完成,然后将某些成员函数称为每个实例。

您应该创建班级以处理一个没有向量的项目。GETDATA功能还应输入一项。您在主机中创建一个向量。然后在此矢量上运行一个循环,并为每个项目调用get_item或任何其他API。为了详细说明,在循环中,从控制台输入并将其传递给向量[index] .setItem()