我正在用VC ++编写程序。这里我宣布类Product和Client.In客户端我正在使用函数列表initProduct(),其中list :: iterator i;使用。我无法使用迭代器显示列表。 这是我的代码:
#include "StdAfx.h"
#include <iostream>
#include <string>
#include <list>
#include <iterator>
using namespace std;
class Product
{
int item_code;
string name;
float price;
int count;
public:
void get_detail()
{
cout<<"Enter the details(code,name,price,count)\n"<<endl;
cin>>item_code>>name>>price>>count;
}
};
class Client
{
public:
list<Product> initProduct()
{
char ans='y';
list<Product>l;
list<Product>::iterator i;
while(ans=='y')
{
Product *p = new Product();
p->get_detail();
l.push_back(*p);
cout<<"wanna continue(y/n)"<<endl;
cin>>ans;
}
cout<<"*******"<<endl;
for(i=l.begin(); i!=l.end(); i++)
cout << *i << ' '; //ERROR no operator << match these operand
return l;
}
};
int main()
{
Client c;
c.initProduct();
system("PAUSE");
}
答案 0 :(得分:3)
您必须实施以下功能
class Product {
// ...
friend std::ostream& operator << (std::ostream& output, const Product& product)
{
// Just an example of what you can output
output << product.item_code << ' ' << product.name << ' ';
output << product.price << ' ' << product.count;
return output;
}
// ...
};
您将该函数声明为该类的朋友,因为它必须能够访问Product
的私有属性。
答案 1 :(得分:2)
您需要生成一个ostream& operator<<(ostream& os, const Product& product)
来打印您要显示的信息。
答案 2 :(得分:0)
如果您使用的是C++11
,则可以使用auto
:
for(auto it : Product)
{
cout << it.toString();
}
但你必须实现这个toString()
,它会显示你想要的所有信息