Если заголовок не поможет вам понять проблему. Вот фрагмент кода с тем, что я пытаюсь сделать с моим кодом. У меня есть вектор класса объекта Book, и я хочу получить ввод для объекта книги сразу, поэтому я решил его перегрузить. И во время операции pushback он запрашивает версию >> класса. Так что я сделал это, но все равно не могу принять ввод
class Book{
friend istream &operator>>(istream &in,Book &b);
string name;
unsigned int id;
unsigned int no;
};
class Booklist{
vector<Book>b;
void addBook();
};
istream &operator>>(istream &in,Book &b)
{
// cout<<"Enter book id , no and name :"<<endl; as suggested lets discard it but still its error prone
cin>>b.id>>b.no>>b.name;
return in;
}
void Booklist::addBook()
{
int check;
while(cin>>check){
try{
cout<<"Enter book serial number - "<<endl;
cin>>b.push_back(); // Here is the error part
if(cin){
throw runtime_error("Input failed.\n");}
}
catch(runtime_error error){
cout<<error.what()
<<"Try again? Enter y or n.\n";
char c;
cin>>c;
if(!cin || c=='n'){
break;
}
}
}
}
***ERRORS IN COMPILER***
In member function 'void Booklist::addBook()':|
no matching function for call to 'std::vector<Book>::push_back()'|
note: candidate: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Book; _Alloc = std::allocator<Book>; std::vector<_Tp, _Alloc>::value_type = Book]|
candidate expects 1 argument, 0 provided|
candidate: void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = Book; _Alloc = std::allocator<Book>; std::vector<_Tp, _Alloc>::value_type = Book]|
note: candidate expects 1 argument, 0 provided|