Форум программистов, компьютерный форум CyberForum.ru

vector<[class]> in class и перегрузка (ostream) - C++

Восстановить пароль Регистрация
 
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
09.08.2013, 16:44     vector<[class]> in class и перегрузка (ostream) #1
Доброе всем время суток ) столкнулся с проблемой
Есть у меня несколько классов
и есть класс внутри которого созданы векторы хранящие элементы других 3-х классов
Пытался перегрузить острим для вывода на консоль содержимого класса и вот попал в капкан ) возможно даже своей криворукости так как только изучаю STL вообщем
так работает и выводит


C++
1
2
3
4
5
6
7
8
ostream& operator<<(ostream& os,const avto_salon&a)
 {
    vector<avto> f;
    f.push_back(*a.avtomobils.begin());
    vector<avto>::iterator iter;
    for(iter=f.begin();iter!=f.end();iter++)
        os<<*iter<<endl;
 }
Вот так не работает и выдает ошибки
C++
1
2
3
4
5
6
7
8
ostream& operator<<(ostream& os,const avto_salon&a)
 {
    vector<avto>::iterator iter;
    for(iter=a.avtomobils.begin();iter!=a.avtomobils.end();iter++)
    os<<*iter<<endl;
 
    return os;
 }
а так выглядит ошибка )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1>------ Build started: Project: string, Configuration: Debug Win32 ------
1>Build started 09.08.2013 15:34:52.
1>ClCompile:
1>  main.cpp
1>c:\string\string\main.cpp(384): error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::_Vector_const_iterator<_Myvec>' (or there is no acceptable conversion)
1>          with
1>          [
1>              _Myvec=std::_Vector_val<avto,std::allocator<avto>>
1>          ]
1>          c:\program files\microsoft visual studio 10.0\vc\include\vector(388): could be 'std::_Vector_iterator<_Myvec> &std::_Vector_iterator<_Myvec>::operator =(const std::_Vector_iterator<_Myvec> &)'
1>          with
1>          [
1>              _Myvec=std::_Vector_val<avto,std::allocator<avto>>
1>          ]
1>          while trying to match the argument list '(std::_Vector_iterator<_Myvec>, std::_Vector_const_iterator<_Myvec>)'
1>          with
1>          [
1>              _Myvec=std::_Vector_val<avto,std::allocator<avto>>
1>          ]
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.61
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Как сделать чтобы 2-й вариант разботал )) что делаю не правельно )
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
09.08.2013, 16:48     vector<[class]> in class и перегрузка (ostream) #2
без полного кода ничего сказать нельзя
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
09.08.2013, 16:50  [ТС]     vector<[class]> in class и перегрузка (ostream) #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
#include <fstream>
#include "avto.h"
#include "client.h"
#include "date.h"
#include "Person.h"
#include "personnel.h"
using namespace std;
#pragma once
class avto_salon
{
    vector<personnel> personels;//вектор персоонала
    vector<avto> avtomobils;//вектор автомобили
    vector<client> clients;//вектор клиенты
    int id;//int id
public:
    avto_salon(){id=1;}
    friend ostream& operator<<(ostream& os,const avto_salon&a);
    void set_new_avto(const avto&a)
    {
        avtomobils.push_back(a);
    }
};
что еше нужно я кину ! кидать все много копипаста
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,159
Завершенные тесты: 1
09.08.2013, 16:52     vector<[class]> in class и перегрузка (ostream) #4
Похоже для класса avtomobils надо создать метод operator=(const avtomobils&)
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
09.08.2013, 16:56  [ТС]     vector<[class]> in class и перегрузка (ostream) #5
Цитата Сообщение от zss Посмотреть сообщение
Похоже для класса avtomobils надо создать метод operator=(const avtomobils&)
avtomobils это экземпляр вектора типа avto
C++
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
#include <iostream>
#include <fstream>
using namespace std;
#pragma once
class avto
{
    string body_type;               //тип кузова
    string mark;                    //марка автомобиля
    string model;                   //модель автомобиля
    string transmission;            //коробка передач
    string type_of_fuel;            //вид топлива
    double displacement;            //обьем двигателя
    int year_of_manufacture;        //год выпуска
public:
 
    avto();
    avto(string abody_type,string amark,string amodel,string atransmission,string atype_of_fuel,double adisplacement,int ayear_of_manufacture);
    avto(const avto&a);
    avto operator=(const avto&a);
    friend ofstream& operator<<(ofstream&os,const avto&a);
    friend ifstream& operator>>(ifstream&is,avto&a);
    friend ostream& operator<<(ostream& os,const avto& a);
    friend istream& operator>>(istream& is, avto& a);
 
};
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
09.08.2013, 16:56     vector<[class]> in class и перегрузка (ostream) #6
Цитата Сообщение от alex1392 Посмотреть сообщение
vector<avto>::iterator iter;
avto_salon () - ссылка на константу, так что вероятно так
C++
1
vector<avto>::const_iterator iter;
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
09.08.2013, 16:59  [ТС]     vector<[class]> in class и перегрузка (ostream) #7
Цитата Сообщение от gray_fox Посмотреть сообщение
avto_salon () - ссылка на константу, так что вероятно так
C++
1
vector<avto>::const_iterator iter;
Так и есть благодарю за помощь )) учу STL с константным итер еше не сталкивался ))
gray-fox подскажите еше такую вещь
приходится использовать
C++
1
digma.set_new_avto(audi);
так как все скрыто внутри класса возможноли сделать их дружевственными чтобы иметь возможность
C++
1
digma.avtomobils.push_back(ford);
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
09.08.2013, 17:04     vector<[class]> in class и перегрузка (ostream) #8
C++
1
2
//vector<avto>::iterator iter;
vector<avto>::const_iterator iter;
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
09.08.2013, 17:11     vector<[class]> in class и перегрузка (ostream) #9
Цитата Сообщение от alex1392 Посмотреть сообщение
сделать их дружевственными
Зачем тогда нужен set_new_auto ? Я не понял... Если нужен доступ к полю automobiles, то сделай его public, либо добавь необходимые методы для доступа...
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
09.08.2013, 17:13     vector<[class]> in class и перегрузка (ostream) #10
Не понятен вопрос. Если первый вариант рабочий, что еще нужно.???
А по поводу ошибки, если я не ошибаюсь, то оно пишет что

binary '=' : no operator found which takes a right-hand operand of type 'std::_Vector_const_iterator<_Myvec>' (or there is no acceptable conversion)
Не найден не один оператор "="(перегруженый) который принимает в качестве правого операнда 'STD :: _Vector_const_iterator <_Myvec>' или нет приемлемого преобразования.

То есть необходимо либо правильно преобразовать, либо что бы твой метод класса avto_salon.avtomobils.end() возвращал итератор подобный vector<avto>::iterator.
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
09.08.2013, 17:15  [ТС]     vector<[class]> in class и перегрузка (ostream) #11
Цитата Сообщение от egor2116 Посмотреть сообщение
Не понятен вопрос. Если первый вариант рабочий, что еще нужно.???
А по поводу ошибки, если я не ошибаюсь, то оно пишет что


Не найден не один оператор "="(перегруженый) который принимает в качестве правого операнда 'STD :: _Vector_const_iterator <_Myvec>' или нет приемлемого преобразования.

То есть необходимо либо правильно преобразовать, либо что бы твой метод класса avto_salon.avtomobils.end() возвращал итератор подобный vector<avto>::iterator.
Тема разобрана ошибка была в том что нужно применять константный итератор тоесть я забыл написать конст
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 17:16     vector<[class]> in class и перегрузка (ostream)
Еще ссылки по теме:

C++ Не пойму конструкцию template <template <class T> class X>
Как инициализировать Vector <class>? C++
C++ Create a programm that creates an object of created class Time and tests the member functions of class

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
09.08.2013, 17:16  [ТС]     vector<[class]> in class и перегрузка (ostream) #12
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Выводится элемент типа avto для которого не перегружен вывод...
C++
1
2
3
4
5
6
7
8
9
10
11
12
ostream& operator<<(ostream& os,const avto& a)
{
    os<<"body type="<<a.body_type<<endl;
    os<<"mark="<<a.mark<<endl;
    os<<"model="<<a.model<<endl;
    os<<"transmission="<<a.transmission<<endl;
    os<<"type_of_fuel="<<a.type_of_fuel<<endl;
    os<<"displacement="<<a.displacement<<endl;
    os<<"year_of_manufacture="<<a.year_of_manufacture<<endl;
 
    return os;
}
Тема закрыта решение было найдено 5 сообщений назад благодоря grey-fox
Yandex
Объявления
09.08.2013, 17:16     vector<[class]> in class и перегрузка (ostream)
Ответ Создать тему
Опции темы

Текущее время: 19:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru