Как передать вектор в перегруженный выходной поток, который принимает пользовательский объект в качестве аргумента?

0
 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) {}', но он все еще не работает. Компилятор возвращает ошибку, которая гласит: "ожидаемый", "или"..."до" ("токен".

  • 1
    Функции в классе имеют доступ ко всем векторным функциям, но класс не является самим вектором, поэтому нельзя ожидать, что он будет вести себя (или иметь функции) вектора.
  • 0
    Вы изменили вопрос. Начните новый вместо этого.
Теги:
object
vector
output

3 ответа

0

Эта строка:

vector<double> vec(n);

Не может отображаться внутри тела класса как объявление переменной. Он должен быть инициализирован следующим образом:

vector<double> vec = vector<double>(n); // copy-initialization

или используя список инициализаторов членов:

example(vector<double> vec const&) : vec(vec) { }

который скопирует его из другого экземпляра.

0

Чтобы сделать ответ конкретным, вы должны быть

 class example{
 // ...
 example(const vector<double> &vec_, int n_)
   : vec(vec_), n(n_)
 { }

 // ... 
};

Это будет инициализировать vec чтобы быть копией аргумента, который должен быть передан по ссылке, чтобы избежать лишних копий.

0

Ваши ошибки не имеют ничего общего с vector, потоками или контролем доступа. Вы просто используете недопустимый синтаксис для объявления параметра vec и параметра конструктора.

Изменить для ответа на обновленный вопрос:

Проблема в том, что когда я создаю новый объект класса класса, он создает только вектор с одним элементом.

Это другой вопрос, чем ваш оригинальный. Вы должны открыть новый вопрос.

Например, когда я создаю объект типа 'sample s (vector vec); он по понятным причинам создает объект с одним элементом.

Нет, это объявляет функцию s которая принимает vector аргумент, называемый vec и возвращает sample. Вам действительно необходимо получить базовый синтаксис языка.

  • 0
    Ну, он также должен сделать s.get_data().size() вместо s.size() .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню