I have a customer class as following,
#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); }; Overloading sections in the cpp file looks as following
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; } Then in my main class I try to create a customer object as following,
Customer* cust = new Customer(); cust << customerInfo[0] << customerInfo[1] << customerInfo[2] << customerInfo[3] << customerInfo[4] << customerInfo[5] << customerInfo[6]; But when I'm compiling I get the following error,
can you please help?
Thanks.
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'
operator>>, but the error message is aboutoperator<<. You've definedostream &operator<<(ostream &, Customer &). You normally wantCustomer const &instead.