Ошибка no match for 'operator>>' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and 'std::vector<int>') 34 | cin >> v; Что не так?
Я делаю задание 14 главы 19 из книги "Принципы и практика использования C++" Бьерн Страуструп. Я добавил перегрузку операторов >> и << для вектора типа T. Но что-то происходит не так и у меня не работает код. Помогите пожалуйста! Вот код:
#include <iostream>
#include <string>
#include <vector>
using std::vector;
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::ostream;
using std::istream;
void keep_window_open () {char ch; cin >> ch;}
template<typename T> class S
{
T val;
public:
S(T value): val{value} {}
T& get();
T get() const {return val;}
T& operator=(const T& value);
};
template<typename T> T& S<T>::get() {return val;}
template<typename T> T& S<T>::operator=(const T& value)
{
val = value;
return val;
}
template<typename T> T& read_val(T& v)
{
cin >> v;
return v;
}
template<typename T> ostream& operator<<(ostream& os, vector<T> vec)
{
os << "{";
for (int i = 0; i < vec.size(); ++i) {
os << " " << vec[i];
if (i != vec.size() - 1) os << ",";
}
os << "}";
return os;
}
template<typename T> istream& operator>>(istream& is, vector<T> vec)
{
for (int i = 0; i < vec.size(); ++i) {
is >> vec[i];
cout << endl;
}
return is;
}
int main()
{
S<int> number {read_val(number.get())};
S<double> dou {read_val(dou.get())};
S<char> ch {read_val(ch.get())};
S<string> str {read_val(str.get())};
vector<int> vec (3);
S<vector<int>> vs {read_val(vs.get())};
cout << number.get() << " " << dou.get() << " " << ch.get() << " " << str.get() << " " << vs.get() << endl;
keep_window_open();
return 0;
}
Перегрузка для вектора типа T нужна, чтобы использовать на векторе функцию read_val. Нужно было. чтобы с помощью функции read_val написать значение val для объекта vs. Но что-то пошло не так.
Источник: Stack Overflow на русском