【发布时间】:2018-10-16 02:10:27
【问题描述】:
我在使用信息填充容器地图时遇到问题。我用 operator>> 阅读了这些信息,但它在我的二等 CDealer 中给了我这些错误。 no operator ">>" matches these operands 和 binary">>": no operator found which takes a right-hand operand of type 'const CStock'(or these is no acceptable conversion)
我有三个班级:拥有map<CStock, pair<unsigned, double>> Stock; 的CStock、CDealer 和拥有vector<CDealer*> Dealers; 的CShop
如果有人可以帮助我,我将非常感激。
这是我在 CStock 中的运算符 >
ostream &operator << (ostream &toStream, const CStock &S){
toStream << "Name Stock: " << S.m_strName_stock << " Producer: " << S.m_strProducer <<
"Date: " << S.Date;
return toStream;
}
istream &operator >> (istream &fromStream, CStock &S)
{return fromStream >> S.m_strName_stock >> S.m_strProducer >> S.Date;}
这是我在 CDealer 中的运算符 > `
ostream &operator << (ostream &toStream, CDealer &D)
{
toStream << "Name Dealer: " << D.m_strName_Dealer << " Agent: " << D.m_strAgent <<
"Address: " << D.m_strAddress;
map<CStock, pair<unsigned, double>>::const_iterator it = D.Stock.begin();
while (it != D.Stock.end())
{
toStream << it->first <<it->second.first << it->second.second;
}
return toStream;
}
istream &operator >> (istream &fromStream, CDealer &D)
{
map<CStock, pair<unsigned, double>>::iterator it = D.Stock.begin();
fromStream >> D.m_strName_Dealer >> D.m_strAgent >> D.m_strAddress;
while (it!= D.Stock.end())
{fromStream >> it->first >> it->second.first >> it->second.second;}
return fromStream
}
这是带有参数的构造函数:文件名和这些运算符>
CShop::CShop(const string &fname)
{
CDealer c;
fstream File(fname, ios::in);
if (File.is_open())
{
File >> m_strNameShop;
File >> m_strCity;
while (File>>c)
{
Dealers.push_back(new CDealer(c));
}
File.close();
}
else
throw "ERROR! ";
}
ostream &operator << (ostream &toStream, const CShop &S)
{
toStream << "Name Shop: " << S.m_strNameShop << " City: " << S.m_strCity;
vector<CDealer* >::const_iterator it = S.Dealers.begin();
while (it != S.Dealers.end())
{
CDealer* dealerPtr = *it++;
toStream << *dealerPtr<< endl;
}
return toStream;
}
istream &operator >> (istream &fromStream, CShop &D)
{
return fromStream >> D.m_strNameShop >> D.m_strCity;
}
最后是 main()
#include"CDealer.h"
#include"CShop.h"
#include<iostream>
#include<string>
#include <stdlib.h>
#include<vector>
using namespace std;
int main()
{
CShop SS1("data.txt");
cout << SS1;
system("pause");
return 0;
}
【问题讨论】:
-
欢迎来到 StackOverflow。请查看How to Ask,并提供minimal reproducible example。照原样,这里有很多代码 - 其中大部分与您的问题完全无关。如果有一个简短的程序会有所帮助,直接指出问题。
标签: c++ c++11 stl containers