class example{
int n;
vector <double> vec;
example(const vector <double> &vec) : vec(vec){}
void set_data(const vector<double> &v){vec = v;}
const vector<double> &get_data() const {return vec;}
};
ostream &operator<< (ostream &output, const sample &s){
return output << "< " << s.get_data().size() << " : " << //element1 << element2 << //elementN;
}
Я пытаюсь создать пользовательский поток вывода для класса, который создает векторные объекты. Выход должен возвращать размер (т.е. Количество элементов в векторе) и элементы в векторе.
Проблема в том, что когда я создаю новый объект класса класса, он создает только вектор с одним элементом.
Например, когда я создаю объект типа 'sample s (vector vec); он по понятным причинам создает объект с одним элементом. Я попытался добавить больше аргументов в конструктор, как 'const vector & vec (n), int n): vec (vec), n (n) {}', но он все еще не работает. Компилятор возвращает ошибку, которая гласит: "ожидаемый", "или"..."до" ("токен".
Эта строка:
vector<double> vec(n);
Не может отображаться внутри тела класса как объявление переменной. Он должен быть инициализирован следующим образом:
vector<double> vec = vector<double>(n); // copy-initialization
или используя список инициализаторов членов:
example(vector<double> vec const&) : vec(vec) { }
который скопирует его из другого экземпляра.
Чтобы сделать ответ конкретным, вы должны быть
class example{
// ...
example(const vector<double> &vec_, int n_)
: vec(vec_), n(n_)
{ }
// ...
};
Это будет инициализировать vec
чтобы быть копией аргумента, который должен быть передан по ссылке, чтобы избежать лишних копий.
Ваши ошибки не имеют ничего общего с vector
, потоками или контролем доступа. Вы просто используете недопустимый синтаксис для объявления параметра vec
и параметра конструктора.
Изменить для ответа на обновленный вопрос:
Проблема в том, что когда я создаю новый объект класса класса, он создает только вектор с одним элементом.
Это другой вопрос, чем ваш оригинальный. Вы должны открыть новый вопрос.
Например, когда я создаю объект типа 'sample s (vector vec); он по понятным причинам создает объект с одним элементом.
Нет, это объявляет функцию s
которая принимает vector
аргумент, называемый vec
и возвращает sample
. Вам действительно необходимо получить базовый синтаксис языка.
s.get_data().size()
вместо s.size()
.