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

Класс и vector - C++

Восстановить пароль Регистрация
 
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
15.04.2013, 23:19     Класс и vector #1
всем доброго времени суток,задача состоит в том что бы данные классов хранились в векторе,что я и пытался сделать.
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 23:19     Класс и vector
Посмотрите здесь:

Класс Vector и оператор new C++
C++ Класс Vector
C++ Перегрузка операторов. Класс VECTOR
C++ создать класс шаблон Vector
C++ vector (шаблонный класс)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.04.2013, 23:23     Класс и vector #2
C++
1
books.push_back(book("NAme", "Vasilii", 2, 1991, 200));
это бред...
добавлять в контейнер vector надо объект класса book, а не конструктор непонятно над чем... сконструируйте объект сперва, а потом уже пихайте в vector
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.04.2013, 23:29     Класс и vector #3
Это и есть конструирование объекта.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.04.2013, 23:40     Класс и vector #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"
это в один байт не влезет...
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
15.04.2013, 23:42     Класс и vector #5
Ошибка в том, что конструктор принимает тип char в качестве первого и второго параметра, а ты передаешь const char *, т.е. указатели на строки.
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
15.04.2013, 23:45  [ТС]     Класс и vector #6
разобрался,спасибо,но остался вопрос.
и как потом вывести на консоль данные которые мы занесли в vector
palva
 Аватар для palva
2372 / 1594 / 190
Регистрация: 08.06.2007
Сообщений: 6,362
Записей в блоге: 4
15.04.2013, 23:47     Класс и vector #7
И еще push_back требует объект book в качестве параметра, а конструктор не возвращает объект book. Он вообще ничего не возвращает в принципе.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.04.2013, 23:51     Класс и vector #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
palva
 Аватар для palva
2372 / 1594 / 190
Регистрация: 08.06.2007
Сообщений: 6,362
Записей в блоге: 4
15.04.2013, 23:55     Класс и vector #9
Да, вижу, что не прав.
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
16.04.2013, 00:08  [ТС]     Класс и vector #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;
нормального нечего не выводит.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
16.04.2013, 00:24     Класс и vector #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;
та функция закрыта.... к чему это вообще относится

насчёт основного вопроса - вектор всё же контейнер произвольного доступа, поэтому там сходу можно два варианта обхода реализовать - через индекс и через итератор
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
16.04.2013, 01:43  [ТС]     Класс и vector #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 );
в итоге опять выводит не понятно что
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
16.04.2013, 02:06     Класс и vector #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 )
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
16.04.2013, 02:09  [ТС]     Класс и vector #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;
}
palva
 Аватар для palva
2372 / 1594 / 190
Регистрация: 08.06.2007
Сообщений: 6,362
Записей в блоге: 4
16.04.2013, 07:39     Класс и vector #15
C++
1
2
3
4
char * book::show()
{
    return my_name_of_book;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2013, 16:42     Класс и vector
Еще ссылки по теме:

Задания на класс vector C++
Класс содержащий vector C++
Шаблонный класс vector C++

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

Или воспользуйтесь поиском по форуму:
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
16.04.2013, 16:42  [ТС]     Класс и vector #16
вот реализация ручного ввода,и количество книг по желанию пользователя
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
#define razm 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();
    friend book input();
    friend void show_books(vector<book> &books);
private:
    char my_name_of_book[razm];
    char my_author[razm];
    int my_numb_of_authors,my_year,my_numb_of_pages;
};
 
 
book input()
{
book tmp;
cout<<"Имя книги ";
cin>>tmp.my_name_of_book;
cout<<"Автор ";
cin>>tmp.my_author;
cout<<"Количество авторов ";
cin>>tmp.my_numb_of_authors;
cout<<"Год издания ";
cin>>tmp.my_year;
cout<<"Количество страниц в книге ";
cin>>tmp.my_numb_of_pages;
return tmp;
}
 
void show_books(vector<book> &s_books)
{
if (s_books.empty())
{
    cout<<"Нет книг!!!"; return;
}
cout<<"Каталог книг"<<endl;
    ostream_iterator<book> out_it(cout,"");
    copy(s_books.begin(),s_books.end(),out_it);
    
}
 
book ::~book(){
    //cout<<"Деструктор\n";
}
 
int main(){
    setlocale(0,"");
    vector<book> books;
    int n;
    cout<<"Введи количество книг\n";
    cin>>n;
    for (int i=0;i<n;i++){
    books.push_back(input());
    }
    cout << "\nСoдержимое вектора :\n" ;
    show_books(books);
    system("pause");
    return 0;
}
Yandex
Объявления
16.04.2013, 16:42     Класс и vector
Ответ Создать тему
Опции темы

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