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

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

Войти
Регистрация
Восстановить пароль
 
OlegPL
5 / 5 / 0
Регистрация: 22.10.2013
Сообщений: 100
#1

Класс как тип данных, ошибка - C++

03.12.2013, 15:50. Просмотров 374. Ответов 4
Метки нет (Все метки)

Подскажите пожалуйста в чем ошибка. Или предложите другой вариант пожалуйста... Задача была такая, создать класс студентов, создать несколько студентов, создать класс группа без наследования использую класс студентов как пользовательский тип данных, записать туда всех созданных студентов. На этапе компиляции выдает ошибку...
Line: 52 /* я так понимаю это строка не из моего кода? */
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) /* Как это понять? */
Был бы весьма благодарен...

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
 
using namespace std;
 
class CStudent
{
private:
    char *name;
    char *surname;
public:
 
    CStudent()
    {
        name = NULL;
        surname = NULL;
    }
 
    CStudent(char *name, char *surname)
    {
        set_name(name);
        set_surname(surname);
    }
 
    void set_name(char *name)
    {
        if(this->name != NULL)
            delete [] name;
        this->name = new char[strlen(name) + 1];
        strcpy(this->name, name);
    }
 
    void set_surname(char *surname)
    {
        if(this->surname != NULL)
            delete [] surname;
        this->surname = new char[strlen(surname) + 1];
        strcpy(this->surname, surname);
    }
 
    void set_student(char *name, char *surname)
    {
        set_name(name);
        set_surname(surname);
    }
 
    void set_student(CStudent student)
    {
        if(name != NULL)
            delete [] name;
        if(surname != NULL)
            delete [] surname;
        name = new char[strlen(student.name) + 1];
        strcpy(name, student.name);
        surname = new char[strlen(student.surname) + 1];
        strcpy(surname, student.surname);
    }
 
    ~CStudent()
    {
        if(this->name != NULL)
            delete [] name;
        if(this->surname != NULL)
            delete [] surname;
    }
};
 
class CGroup
{
private:
    CStudent total_students;
public:
    CGroup()
    {}
 
    void set_to_group(CStudent student)
    {
        total_students.set_student(student);
    }
};
 
int main ()
{
    CStudent first, second;
    CGroup new_group[5];
 
    first.set_name("Vasya");
    first.set_surname("Pupkin");
    second.set_student("Vovochka", "Perepelkin");
 
    new_group[0].set_to_group(first);
    
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 15:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс как тип данных, ошибка (C++):

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения - C++
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;typeinfo&gt; using...

Создать абстрактный тип данных - класс вектор - C++
Создать абстрактный тип данных - класс вектор (динамический массив), который имеет указатель на double, число элементов и переменную...

Создать абстрактный тип данных-класс вектор - C++
Создать абстрактный тип данных-класс вектор, который имеет указатель на long, число элементов и переменную состояния. Определить...

Создать абстрактный тип данных - класс вектор - C++
Доброго времени суток! Тут задачку такую не хилую подогнали. Нужна помощь опытных программистов. Ребят, выручайте, без вас...

Описать класс, реализующий тип данных «вещественная матрица» - C++
Уважаемые гении программирования)) Помогите, пожалуйста написать программу на С++ (VS 2008). Заранее огромное спасибо))) Описать...

Ошибка в выводе данных, класс выводит правильно, а класс в классе - нет - C++
Неизвестная для меня проблема. Класс выводит данные правильно из Consigment, а вот третий экземпляр класса, работает не верно, если...

4
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.12.2013, 18:06 #2
В CStudent нужно задать конструктор копирования и оператор присваивания.
1
OlegPL
5 / 5 / 0
Регистрация: 22.10.2013
Сообщений: 100
03.12.2013, 19:49  [ТС] #3
Добавил только конструктор копирования и проблема разрешилась, спасибо большое! А оператор присваивания описывать обязательно? Решил чуток усовершенствовать и хотелось бы узнать, как можно создать динамический массив группу которая может бесконечным образом принимать в себя студентов? Это нужно в самом классе CGroup создать указатель или указатель на указатель, или оставить в классе всё как есть и сделать динамический массив в самом main()?

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
 
using namespace std;
 
class CStudent
{
private:
    char *name;
    char *surname;
public:
 
    CStudent()
    {
        name = NULL;
        surname = NULL;
    }
 
    CStudent(char *name, char *surname)
    {
        set_name(name);
        set_surname(surname);
    }
 
    CStudent(const CStudent &tmp)
    {
        name = new char[strlen(tmp.name) + 1];
        strcpy(name, tmp.name);
        surname = new char[strlen(tmp.surname) + 1];
        strcpy(surname, tmp.surname);
    }
 
    void set_name(char *name)
    {
        if(this->name != NULL)
            delete [] name;
        this->name = new char[strlen(name) + 1];
        strcpy(this->name, name);
    }
 
    void set_surname(char *surname)
    {
        if(this->surname != NULL)
            delete [] surname;
        this->surname = new char[strlen(surname) + 1];
        strcpy(this->surname, surname);
    }
 
    void set_student(char *name, char *surname)
    {
        set_name(name);
        set_surname(surname);
    }
 
    void set_student(CStudent student)
    {
        if(name != NULL)
            delete [] name;
        if(surname != NULL)
            delete [] surname;
        name = new char[strlen(student.name) + 1];
        strcpy(name, student.name);
        surname = new char[strlen(student.surname) + 1];
        strcpy(surname, student.surname);
    }
 
    ~CStudent()
    {
        if(this->name != NULL)
            delete [] name;
        if(this->surname != NULL)
            delete [] surname;
    }
};
 
class CGroup
{
private:
    CStudent total_students;
public:
    CGroup()
    {}
 
    void set_to_group(CStudent student)
    {
        total_students.set_student(student);
    }
};
 
int main ()
{
    CStudent first, second;
    CGroup new_group[5];
 
    first.set_name("Vasya");
    first.set_surname("Pupkin");
    second.set_student("Vovochka", "Perepelkin");
 
    new_group[0].set_to_group(first);
    
    return 0;
}
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.12.2013, 20:02 #4
Цитата Сообщение от OlegPL Посмотреть сообщение
А оператор присваивания описывать обязательно?
http://ru.wikipedia.org/wiki/Правило_трёх_(C%2B%2B_программирование)

Добавлено через 1 минуту
Цитата Сообщение от OlegPL Посмотреть сообщение
и хотелось бы узнать, как можно создать динамический массив группу которая может бесконечным образом принимать в себя студентов?
vector.
1
OlegPL
5 / 5 / 0
Регистрация: 22.10.2013
Сообщений: 100
03.12.2013, 20:10  [ТС] #5
С библиотекой vector пока не знаком... Пока только знакомимся с классами, просто хотелось узнать вариации как и возможно ли такое...
А за ссылочку спасибо)
0
03.12.2013, 20:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 20:10
Привет! Вот еще темы с ответами:

Реализовать через тип данных структура. При сборке и отладки возникает ошибка. В чем ошибка? - C++
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и вывести наименование товара, цена которого...

Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? - C++
Пытаюсь сделать функцию с передачей нескольких параметров,используя битовые операции. В качестве параметров думаю использовать не...

Описать класс, реализующий тип данных «вещественная матрица» и работу с ними - C++
Доброго времени суток, необходима помощь в написании программы. Описать класс, реализующий тип данных «вещественная матрица» и работу...

Классы (Описать класс, реализующий тип данных «вещественная матрица» и работу с ними) - C++
само задание звучит так:Описать класс, реализующий тип данных «вещественная матрица» и работу с ними. Класс должен реализовывать следующие...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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