correct new element pusch_back to the vector  
  Aug 10, 2017 at 5:14pm UTC  
 
Hello I'm reading The C++ PL B. Stroustrup 
and trying to overload istream >> operator 
but something doing wrong and I can't catch what I'm doing wrong
Tere is code 
I created struct Entry
then overloading ostream and istream operator
in void input function I'm trying to add new element 
but it doesn't add new element.
 what I'm doing wrong? 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 
#include <iostream> 
#include <string> 
#include <vector> 
using  namespace  std;
struct  Entry {
	string name;
	int  number;
	Entry() {};
	Entry(string s, int  n): name{s},number{n}{}
};
/* << operator overloading */ 
ostream& operator <<(ostream& os, Entry en)
{
	return  os << en.name << ": "  << en.number << endl;
}
/* >> operator overloading */ 
istream& operator >>(istream& is, Entry en)
{
	return  is >> en.name >> en.number;
}
/* push_back new Entry */ 
void  input(vector<Entry>ph_book)
{
	Entry e; 
	cin >> e;
	ph_book.push_back(e);
}
int  main()
{
	vector<Entry>phone_book = {  // vector 
		{"David" , 12334},
		{"Karl" , 23455},
		{"Stiv" , 873059},
	};
	
	//Entry e = { "Pol", 123644 }; 
	//phone_book.push_back(e); 
	cout << "Add new number: " ;
	input(phone_book); // add new element to vector phone_book  
	for  (int  i = 0; i != phone_book.size(); ++i)
	{
		cout << phone_book[i];
	}
	
}
 
 
 
 
 
 
  Aug 10, 2017 at 5:34pm UTC  
 
Pass by reference. Note 
const  in operator << since it should not modify the object.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
/* << operator overloading */ 
ostream& operator <<(ostream& os, const   Entry&  en)
{
    return  os << en.name << ": "  << en.number << endl;
}
/* >> operator overloading */ 
istream& operator >>(istream& is, Entry&  en)
{
    return  is >> en.name >> en.number;
}
/* push_back new Entry */ 
void  input(vector<Entry>&  ph_book)
{
    Entry e; 
    cin >> e;
    ph_book.push_back(e);
}
 
 
 
 
 
 
  Aug 10, 2017 at 7:50pm UTC  
 
Thanks Chervil  
but I try it dose'n help :( 
 
 
 
 
  Aug 10, 2017 at 8:28pm UTC  
 
Could you explain more please. 
 
I tested the code above, it should work. Perhaps you didn't copy+paste properly? 
 
 
 
 
Topic archived. No new replies allowed.