[英]C++ operator >> overloading
我有以下客戶類別,
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include "SimpleDate.h"
using namespace std;
class Customer {
private:
string customerId;
string name;
string address;
string city;
string postCode;
SimpleDate* dateLastPurchased;
double dollarsOwed;
public:
//Customer(string customerIdVal, string nameVal);
Customer();
string getCustomerId();
string getName();
void setAddress(string addressVal);
string getAddress();
void setPostCode(string postCodeVal);
string getPostCode();
void setCity(string cityVal);
string getCity();
void setDateLastPurchased(SimpleDate* date);
SimpleDate* getDateLastPurchased();
void addDollarsOwed(double amount);
double getDollarsOwed();
friend ostream& operator<< (ostream &out, Customer &cust);
friend istream& operator>> (istream &in, Customer &cust);
};
cpp文件中的重載部分如下所示
ostream& operator<< (ostream &out, Customer &cust)
{
out << cust.customerId << "\t" << cust.name << "\t" << cust.address << "\t" << cust.city << "\t" << cust.postCode << "\t" << cust.dateLastPurchased->getFullDate() << "\t" << cust.dollarsOwed << "\t" << std::endl;
return out;
}
istream& operator>> (istream &in, Customer &cust)
{
in >> cust.customerId;
in >> cust.name;
in >> cust.address;
in >> cust.city;
in >> cust.postCode;
string stringData;
in >> stringData;
std::istringstream iss(stringData);
std::string datePart;
int tmp;
vector<int> dateData;
while(std::getline(iss, datePart, '/')) {
sscanf(datePart.c_str(), "%d", &tmp);
dateData.push_back(tmp);
}
SimpleDate* date = new SimpleDate(dateData[2], dateData[1], dateData[0]);
cust.dateLastPurchased = date;
string stringDollarsOwed;
in >> stringDollarsOwed;
sscanf(stringDollarsOwed.c_str(), "%lf", &cust.dollarsOwed);
return in;
}
然后在我的主類中,我嘗試如下創建一個客戶對象,
Customer* cust = new Customer();
cust << customerInfo[0] << customerInfo[1] << customerInfo[2] << customerInfo[3] << customerInfo[4] << customerInfo[5] << customerInfo[6];
但是當我編譯時,出現以下錯誤,
你能幫忙嗎?
謝謝。
AppManager.cpp: In member function 'Customer* AppManager::createCustomerObject(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)':
AppManager.cpp:445: error: no match for 'operator<<' in '& cust << customerInfo.std::vector<_Tp, _Alloc>::operator[] [with _Tp = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Alloc = std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >](0u)'
Customer.h:46: note: candidates are: std::ostream& operator<<(std::ostream&, Customer&)
*** Error code 1
make: Fatal error: Command failed for target `Tour'
該運算符:
ostream& operator<< (ostream &out, Customer &cust)
允許您做類似的事情
Customer c;
std::cout << c << std::endl;
std::ofstream output("customers.txt");
output << c << std::endl;
而不是
Customer c;
c << x;
絕對不是
Customer* c = ...;
c << x;
您似乎正在將customerInfo [0]等對象插入已創建的cust對象中。 您不能像這樣將一個對象插入另一個對象。 插入/提取運算符被重載時,只能與原始數據類型一起使用,即在對象中存儲和顯示值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.