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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
#1

Класс и vector - C++

15.04.2013, 23:19. Просмотров 532. Ответов 15
Метки нет (Все метки)

всем доброго времени суток,задача состоит в том что бы данные классов хранились в векторе,что я и пытался сделать.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <algorithm>
#include <vector>
 
 
using namespace std;
 
#define n 40
 
class book{
public:
    book(char name_of_book=NULL,char author=NULL,int numb_of_authors=0,int year=0,int numb_of_pages=0);
    //void input();
    //void show();
    ~book();
private:
    char my_name_of_book[n],my_author[n];
    int my_numb_of_authors,my_year,my_numb_of_pages;
};
 
 
book::book(char name_of_book,char author,int numb_of_authors,int year,int numb_of_pages)
{
my_name_of_book[n]=name_of_book;
my_author[n]=author;
my_numb_of_authors=numb_of_authors;
my_year=year;
my_numb_of_pages=numb_of_pages;
 
 
}
 
book ::~book(){
    cout<<"Деструктор\n";
}
 
int main(){
    setlocale(0,"");
    vector<book> books;
    books.push_back(book("NAme", "Vasilii", 2, 1991, 200));//Ошибка book::book: ни одна из 2 перегрузок не может преобразовать все типы аргументов
    books.push_back(book("Titans", "Artem", 1, 2010, 483));//Ошибка book::book: ни одна из 2 перегрузок не может преобразовать все типы аргументов
    sort(books.begin(), books.end());
    system("pause");
    return 0;
}
но вот почему не добавляет не пойму.
и как потом вывести на экран данные которые мы занесли в vector
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 23:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс и vector (C++):

Базовый класс Complex и производный класс Vector - C++
Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в алгебраической форме и основных операций с ними:...

Класс Vector - C++
Помогите молю. Нужно реализовать класс вектор как класс шаблон. Перегрузить операторы ввода- вывода, сложение (сумма векторов), умножение...

Шаблонный класс vector - C++
Всем привет. Помогите создать шаблонный класс vector и массив который хранит значения template&lt;typename T, size_t size&gt; class array{ ...

Класс Vector и оператор new - C++
Есть класс CItem Есть тип: typedef std::vector &lt;CItem&gt; ItemVector; typedef std::vector &lt;CItem&gt;::iterator Iter;Есть вектор и итератор:...

Задания на класс vector - C++
Помогите, пожалуйста, с задачей. Нужно добавить в вектор нечетные целые числа от -3 до 3. Удалить последнее число. Распечатать числа из...

Определить класс Vector - C++
Не могу понять оформление класса вектора. Перечитала лекцию, погуглила - инфы стало слишком много и я запуталась; все равно не могу...

15
abit
264 / 263 / 33
Регистрация: 03.02.2013
Сообщений: 731
15.04.2013, 23:23 #2
C++
1
books.push_back(book("NAme", "Vasilii", 2, 1991, 200));
это бред...
добавлять в контейнер vector надо объект класса book, а не конструктор непонятно над чем... сконструируйте объект сперва, а потом уже пихайте в vector
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.04.2013, 23:29 #3
Это и есть конструирование объекта.
0
abit
264 / 263 / 33
Регистрация: 03.02.2013
Сообщений: 731
15.04.2013, 23:40 #4
вы видимо меня не поняли)

гляжу на ваше "конструирование"...

C++
1
book::book(char name_of_book,char author,int numb_of_authors,int year,int numb_of_pages)
что у нас идёт первым аргументом конструктора?
тип char - 1 байт... вторым- тип char 1 байт...
а зачем вы туда передаёте
"NAme", "Vasilii"
это в один байт не влезет...
1
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
15.04.2013, 23:42 #5
Ошибка в том, что конструктор принимает тип char в качестве первого и второго параметра, а ты передаешь const char *, т.е. указатели на строки.
0
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
15.04.2013, 23:45  [ТС] #6
разобрался,спасибо,но остался вопрос.
и как потом вывести на консоль данные которые мы занесли в vector
0
palva
2747 / 1848 / 266
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
15.04.2013, 23:47 #7
И еще push_back требует объект book в качестве параметра, а конструктор не возвращает объект book. Он вообще ничего не возвращает в принципе.
0
abit
264 / 263 / 33
Регистрация: 03.02.2013
Сообщений: 731
15.04.2013, 23:51 #8
Цитата Сообщение от palva Посмотреть сообщение
И еще push_back требует объект book в качестве параметра, а конструктор не возвращает объект book. Он вообще ничего не возвращает в принципе.
вы не правы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
 
class A
{
    public:
       A() {std::cout<<"Constructor"<<std::endl;}
};
 
int main()
{
   std::vector<A> B; 
   B.push_back(A());
   std::cout<<B.size();
   return 0;
}
это работает и конструирует таки объект для для B
0
palva
2747 / 1848 / 266
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
15.04.2013, 23:55 #9
Да, вижу, что не прав.
0
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
16.04.2013, 00:08  [ТС] #10
повторюсь как на консоль вывести информацию которую мы занесли в обьект вектора
потому что
C++
1
2
3
4
5
6
char book::show()
{
    return my_name_of_book[n];
}
for (int i = 0; i < (int)books.size(); i++) 
        cerr << books[i].show() << endl;
нормального нечего не выводит.
0
abit
264 / 263 / 33
Регистрация: 03.02.2013
Сообщений: 731
16.04.2013, 00:24 #11
Vlad_,
тут вообще какая-то чепуха у вас написана

C++
1
2
3
4
char book::show()
{
    return my_name_of_book[n];
}
это некая функция, из класса book не принимающая аргументов...

и далее не с того не сего вдруг продолжение
C++
1
2
for (int i = 0; i < (int)books.size(); i++) 
        cerr << books[i].show() << endl;
та функция закрыта.... к чему это вообще относится

насчёт основного вопроса - вектор всё же контейнер произвольного доступа, поэтому там сходу можно два варианта обхода реализовать - через индекс и через итератор
0
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
16.04.2013, 01:43  [ТС] #12
через #include <iterator>
C++
1
copy(books.begin(), books.end(), ostream_iterator<book>(cout, "\n"));
Ошибка 1 error C2679: бинарный <<: не найден оператор, принимающий правый операнд типа "book" (или приемлемое преобразование отсутствует)

Добавлено через 38 минут
опять таки хожу по кругу.
добавил
C++
1
2
3
4
5
char getAuthor()const {return my_author[n];}
    friend ostream &operator<<(ostream &stream, const book &book_obj) {
        stream << book_obj.getAuthor() << ", "; 
        return stream;
    }
и
C++
1
2
ostream_iterator<book> out_it (cout,", ");
    copy ( books.begin(), books.end(), out_it );
в итоге опять выводит не понятно что
0
abit
264 / 263 / 33
Регистрация: 03.02.2013
Сообщений: 731
16.04.2013, 02:06 #13
Vlad_,
через #include <iterator>
C++
1
copy(books.begin(), books.end(), ostream_iterator<book>(cout, "\n"));
я так не помню, но поступил бы так -
C++
1
2
   for(std::vector<book>::const_iterator it=books.begin(); it!=books.end(); ++it)
        std::cout<<(*it)<<std::endl;
тут понятно что для book должен быть перегружен оперетор << на ostream& или вместо (*it) определить it->showmethod в классе book
а ещё лучше начать с нуля и заменить std::cout на ostream )
0
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
16.04.2013, 02:09  [ТС] #14
разобрался,скажу это жесть вот готовый код,который работает,может кому-то понадобиться,можете сравнить с оригиналом и понять что нужно было делать)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
#define n 40
 
class book{
public:
    book(char* name_of_book="",char* author="",int numb_of_authors=0,int year=0,int numb_of_pages=0);
    friend ostream &operator<<(ostream &stream, const book &book_obj) {
        stream << book_obj.my_name_of_book << ", "<<book_obj.my_author<< ", "<<book_obj.my_numb_of_authors<< ", "<<book_obj.my_year<< ", "<<book_obj.my_numb_of_pages<<endl ; 
        return stream;
    }
    ~book();
private:
    char* my_name_of_book;
    char* my_author;
    int my_numb_of_authors,my_year,my_numb_of_pages;
};
 
 
 
book::book(char* name_of_book,char* author,int numb_of_authors,int year,int numb_of_pages)
{
    my_name_of_book=name_of_book;
    my_author=author;
    my_numb_of_authors=numb_of_authors;
    my_year=year;
    my_numb_of_pages=numb_of_pages;
}
 
book ::~book(){
    //cout<<"Деструктор\n";
}
 
int main(){
    setlocale(0,"");
    vector<book> books;
    books.push_back(book("NAme", "Vasilii", 2, 1991, 200));
    books.push_back(book("Titans", "Artem", 1, 2010, 483));
    books.push_back(book("Voina i Mir", "Lev", 1, 1910, 1423));
    cout << "Сoдержимое вектора :\n" ;
    ostream_iterator<book> out_it (cout,"");
    copy ( books.begin(), books.end(), out_it );
    cout<<endl;
    system("pause");
    return 0;
}
0
palva
2747 / 1848 / 266
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
16.04.2013, 07:39 #15
C++
1
2
3
4
char * book::show()
{
    return my_name_of_book;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2013, 07:39
Привет! Вот еще темы с ответами:

Класс содержащий vector - C++
Вот я написал класс с использованием vector #include &lt;vector&gt; #include &lt;iostream&gt; using namespace std; class Vector { ...

Создать класс Vector 2D - C++
Создать класс Vector для работы с векторами на плоскости, содержащий следующие члены класса: 1. Поля: • int х, у; 2. ...

vector (шаблонный класс) - C++
Нужно создать простенький шаблонный класс вектор Подскажите пожалуйста , как написать запись элемента в начало вектора и в конец...

создать класс шаблон Vector - C++
создать класс шаблон Vector, который отличается от класса Array тем , что в данном классе можно как добавлять элементы , так и удалять...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
16.04.2013, 07:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru