函数调用不起作用,矢量访问数据
function call doesn't work and vector access data
,所以我想执行使用类项目的向量的库存程序。到目前为止,我的代码看起来像这样:
#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()
相关文章:
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- C++ 11 中的锁定是否保证访问数据的新鲜度?
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 向量下标出的范围错误.即使向量的索引大于访问数据的索引,也会发生误差
- 通过指针访问数据(重新解释转换)与 .或 ->运算符
- C Koala图库 - 了解访问数据结构的语法
- CAFFE C - 其他层中的访问数据
- C++ 访问数据的链表实现
- 基于两个程序之间的事件触发器访问数据(内存)
- 引用本地可访问数据的正当理由
- 函数调用不起作用,矢量访问数据
- BMP 文件,访问数据
- 如何从其他类访问数据私有内部类
- 如何从双精度向量的向量访问数据
- 从 Vector3f 访问数据
- 从文件访问数据
- 如何在进程已经在访问数据结构时修改数据结构
- 如何从 GMemoryOutputStream 访问数据
- 使用 ostream 从另一个类的结构访问数据