Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 11.05.2011
Сообщений: 71

Ошибки в работе программы с классами, наследованием и т.д

11.01.2013, 01:02. Показов 852. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется моя первая попытка создать класс, производный из него, конструктор и всю эту радость запустить и вывести.
Но почему то возникает приличное количество ошибок, мне не понятных ( оперируя тремя источниками создавалась эта программа, по этому не которые прототипы строчек кода не переплетались с другими).
Прошу объяснить мне мои ошибки( Заранее буду весьма благодарна)
Здесь присутствует класс Dancer, производный от него Dancer_l, конструктор (так называемый) и функции ввода и вывода информации.

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
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
 
 
class Dancer
    
{
public:
Dancer (char*, int*, char*)
{}
 
    char FIOpartner[128];
    int grp;
    char FIOpartnersha[128];
 
    };
 
 
 
class Dancer_l :  public Dancer
{
public:
    Dancer_1 (char*, int*)
    {}
    char vzCat;
    int colSor;
 
};
 
 
int getdata (Dancer & dnc)
{
    cout << "Vvedite FIO partnera: ";
    cin>>dnc.FIOpartner;
     if (stricmp(dnc.FIOpartner, "exit") ==0)
     {
     return 0;
     }
    cout<< "Vvedite got rojdenja partnera: ";
    cin>>dnc.grp;
    cout<< "Vvedite FIO partnershi: ";
    cin>>dnc.FIOpartnersha;
    return 1;
 
}
 
int getdata (Dancer_1 & dnc1)
{
    cout << "Vvedite vozrastnuy categoriy (yuniuru, molodej, proffesionallu: ";
    cin>>dnc1.vzCat;
    // if (stricmp(dnc.FIOpartner, "exit") ==0)
     //{
     //return 0;
     //}
    cout<< "Vvedite kolichestvo sorevnovanii v kotoruh para uchastvovala v etom gody: ";
    cin>>dnc1.colSor;
    //cout<< "Vvedite FIO partnershi: ";
    //cin>>dnc.FIOpartnersha;
    return 1;
}
void displaydata (Dancer & dnc)
{
    cout << dnc.FIOpartner
        <<" "
        <<dnc.grp
        <<"/"
        <<dnc.FIOpartnersha;
        //<</n;
 
}
 
void displaydata (Dancer_1 & dnc1)
{
    cout << dnc1.vzCat;
        <<" "
        <<dnc1.colSor;
    
        //<<dnc.FIOpartnersha;
        //<</n;
}
 
int main (int nArg, char* pszArgs[])
{
    const int MAX = 3;
    Dancer dnc [MAX];
    cout << "Vvedite exit  dlja vuhoda v pole FIO partnera"<<endl;
    int index = 0;
    while (getdata(dnc[index]) && index <MAX)
    {
        index++;
    }
    //cout << dnc.FIOpartner<<dnc.grp<<dnc.FIOpartnersha;
    for (int i=0; i<index; i++)
    {
        displaydata(dnc[i]);
 
    }
    return 0;
}
Список выдаваемых ошибок:

Ошибка1 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию (строка 26)

Предупреждение 2 warning C4183: Dancer_1: отсутствие возвращаемого типа; предполагается функция-член, возвращающая "int" (строка 26)

Ошибка3 error C2065: Dancer_1: необъявленный идентификатор (строка49)

Ошибка4 error C2065: dnc1: необъявленный идентификатор (строка49)

Ошибка5 error C2448: getdata: вероятно, инициализатор, использующий стиль функции, является определением функции (строка50)

Ошибка 6 error C2065: Dancer_1: необъявленный идентификатор (строка74)

Ошибка7 error C2065: dnc1: необъявленный идентификатор (строка 74)

Ошибка8 error C2448: displaydata: вероятно, инициализатор, использующий стиль функции, является определением функции (строка 75)

Ошибка 9 error C2512: Dancer: нет подходящего конструктора по умолчанию (строка 87)

Заранее извиняюсь за такую объемную и чайниковую тему )
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2013, 01:02
Ответы с готовыми решениями:

Ошибки при работе с классами
Создать объекты класса &lt;имя класса&gt; (класс и его поля задаются в соответствии с выбранным вариантом в лабораторной работе 1), причем...

Ошибки при работе с классами на linux
Здравствуйте, нужна помощь по классам в си++. Я не так давно пишу на си++, поэтому не ругайте сильно.Надо было написать класс семафор и...

Номер строки ошибки при работе с классами
Есть обработчик ошибок, который пишет необходимую инфу о произошедшей ошибки при работе процедуры/функции, в том числе пишется номер...

8
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
11.01.2013, 01:12
1 и l - разные символы
0
0 / 0 / 0
Регистрация: 11.05.2011
Сообщений: 71
11.01.2013, 01:17  [ТС]
блин, такая глупая ошибка, спасибо, не заметила.
но остается еще одна ошибка в двух местах

Ошибка 2 error C2512: Dancer: нет подходящего конструктора по умолчанию (строка 87
и 25)
чем она может быть вызвана?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
11.01.2013, 01:20
Цитата Сообщение от pr1me222 Посмотреть сообщение
Dancer (char*, int*, char*)
{}
а зачем ты создал конструктор с параметрами если ничего не инициализируешь?
тебе в конструкторе надо инициализировать члены класса
например
C++
1
2
3
4
5
6
Dancer (char* arg1, int arg2, char* arg3)
{
strcpy(FIOpartner,arg1);
grp=arg2;
strcpy(FIOpartnersha,arg3);
}
}

Добавлено через 2 минуты
Цитата Сообщение от pr1me222 Посмотреть сообщение
const int MAX = 3;
* * Dancer dnc [MAX];

у тебя только один конструктор
Цитата Сообщение от pr1me222 Посмотреть сообщение
Dancer (char*, int*, char*)
и он содержит три параметра
а ты вызываешь без параметров
0
0 / 0 / 0
Регистрация: 11.05.2011
Сообщений: 71
11.01.2013, 01:33  [ТС]
исправила, но появился еще один вопрос: программа запускается, однако предлагает вводить данные указанные в первом классе, а в производном от него не выводятся :

C++
1
2
3
4
cout << "Vvedite vozrastnuy categoriy (yuniuru, molodej, proffesionallu: ";
    cin>>dnc1.vzCat;
    cout<< "Vvedite kolichestvo sorevnovanii v kotoruh para uchastvovala v etom gody: ";
    cin>>dnc1.colSor;
п.с: извините за такое огромное количество вопросов.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
11.01.2013, 01:58
Цитата Сообщение от pr1me222 Посмотреть сообщение
исправила, но появился еще один вопрос: программа запускается, однако предлагает вводить данные указанные в первом классе, а в производном от него не выводятся :
извини не понял?
давай еще раз код (исправленный)
и конкретно что нужно и что получается
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
11.01.2013, 02:19
Самая крупная беда в коде с архитектурой и декомпозицией.
Не говоря уже о неправильной работе со строками, классами и т.п.

Всегда сначала необходимо выделять основные сущности с минимально возможным набором характеристик. Заодно покажу, как обеспечить простейшую работу со строками.
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cstring>
#include <iostream>
 
/**
 * Класс, описывающий одного танцора
 * у танцора есть имя, возраст в годах и пол
 */
class Dancer {
 public:
  // конструктор для создания объекта
  Dancer(const char *name, int age, bool gender)
    : name(strcpy(new char[strlen(name) + 1], name)), age(age),
    gender(gender) {}
  // поскольку в классе есть динамическое поле name (указатель)
  // понадобится переопределить конструктор копирования,
  // оператор присваивания и деструктор:
  // конструктор копирования
  Dancer(const Dancer &other) 
    : name(strcpy(new char[strlen(other.name) + 1], other.name)),
    age(other.age), gender(other.gender) {}
  // оператор присваивания
  Dancer &operator=(const Dancer &other) {
    if (&other != this) {
      delete [] name;
      name = strcpy(new char[strlen(other.name) + 1], other.name);
      age = other.age;
      gender = other.gender;
    }
    return *this;
  }
  // деструктор
  virtual ~Dancer() {
    delete [] name;
  }
  // методы для получения данных о танцоре (aka геттеры или аксессоры)
  // получение имени танцора
  const char *getName() const {
    return name;
  }
  // получение возраста танцора
  int getAge() const {
    return age;
  }
  // получение пола танцора
  bool getGender() const {
    return gender;
  }
 private:
  char *name;  // имя танцора
  int age;     // возраст танцора
  bool gender; // пол танцора (0 -- мужской, 1 -- женский)
};
 
/**
 * Класс, описывающий пару танцоров
 */
class DancingPair {
 public:
  // конструктор для создания пары танцоров используя два объекта танцоров
  DancingPair(const Dancer &firstDancer, const Dancer &secondDancer) 
    : firstDancer(firstDancer), secondDancer(secondDancer) {}
  // методы для получения данных
  // получение первого танцора
  const Dancer &getFirstDancer() const {
    return firstDancer;
  }
  // получение второго танцора
  const Dancer &getSecondDancer() const {
    return secondDancer;
  }  
 private:
  Dancer firstDancer;  // первый танцор
  Dancer secondDancer; // второй танцор
};
 
/**
 * Класс, описывающий возрастную группу танцоров
 */
class AgeGroup {
 public:
  // конструктор для создания возрастной группы с использованием
  // имени группы, минимального и максимального возрастов для группы
  AgeGroup(const char *name, int minimumAge, int maximumAge)
    : name(strcpy(new char[strlen(name) + 1], name)), minimumAge(minimumAge),
    maximumAge(maximumAge) {}
  // поскольку в классе есть динамическое поле name (указатель),
  // понадобится переопределить конструктор копирования,
  // оператор присваивания и деструктор (по аналогии с классом Dancer):
  // конструктор копирования
  AgeGroup(const AgeGroup &other) 
    : name(strcpy(new char[strlen(other.name) + 1], other.name)),
    minimumAge(other.minimumAge), maximumAge(other.maximumAge) {}
  // оператор присваивания
  AgeGroup &operator=(const AgeGroup &other) {
    if (&other != this) {
      delete [] name;
      name = strcpy(new char[strlen(other.name) + 1], other.name);
      minimumAge = other.minimumAge;
      maximumAge = other.maximumAge;
    }
    return *this;
  }
  // деструктор
  virtual ~AgeGroup() {
    delete [] name;
  }
  // методы для получения данных о возрастной группе
  // получение имени танцора
  const char *getName() const {
    return name;
  }
  // получение минимального возраста
  int getMinimumAge() const {
    return minimumAge;
  }
  // получение максимального возраста
  int getMaximumAge() const {
    return maximumAge;
  }
  // проверка, входит ли танцор в возрастную группу
  bool isInGroup(const Dancer &dancer) {
    return dancer.getAge() >= getMinimumAge() &&
      dancer.getAge() < getMaximumAge();
  }
  // проверка, входит ли пара в возрастную группу
  // перегруженный метод.
  // пара входит в группу, если хотя бы один из танцоров
  // входит в группу
  bool isInGroup(const DancingPair &pair) {
    return isInGroup(pair.getFirstDancer()) ||
      isInGroup(pair.getSecondDancer());
  }
 private:
  char *name;     // название группы
  int minimumAge; // минимальный возраст для группы (включительно)
  int maximumAge; // максимальный возраст для группы (не включительно)
};
 
// для упрощения основного кода, перегруежн оператор "<<" для
// вывода объектов на экран с помощью "std::cout << Dancer;"
 
// перегруженый оператор для вывода танцора
std::ostream &operator<<(std::ostream &stream, const Dancer &dancer) {
  return stream << "Dancer{" <<
    "name='" << dancer.getName() << "'," <<
    "age=" << dancer.getAge() << "," <<
    "gender=" << (dancer.getGender() ? "female" : "male" ) << "}";
}
 
// перегруженый оператор для вывода пары танцоров
std::ostream &operator<<(std::ostream &stream, const DancingPair &pair) {
  return stream << "DancingPair{" <<
    "firstDancer=" << pair.getFirstDancer() << "," <<
    "secondDancer=" << pair.getSecondDancer() << "}";
}
 
// перегруженый оператор для вывода возрастной группы
std::ostream &operator<<(std::ostream &stream, const AgeGroup &ageGroup) {
  return stream << "AgeGroup{" <<
    "name='" << ageGroup.getName() << "'," <<
    "minimumAge=" << ageGroup.getMinimumAge() << "," <<
    "maximumAge=" << ageGroup.getMaximumAge() << "}";
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  // создание нескольких возрастных групп
  AgeGroup ageGroups[] = {AgeGroup("Kids", 0, 14), AgeGroup("Juniors", 14, 18),
    AgeGroup("Amateurs", 18, 25)};
  // расчет количества созданых возрастных групп
  int numberOfAgeGroups = sizeof(ageGroups) / sizeof(AgeGroup);
 
  // танцевальная пара
  DancingPair pairIvanAndElena(Dancer("Ivan", 21, false),
    Dancer("Elena", 17, true));
 
  // вывод танцевальной пары на экран
  std::cout << pairIvanAndElena << std::endl;
  // вывод всех возрастных групп, в которых состоит пара, на экран
  for (int i = 0; i < numberOfAgeGroups; ++i) {
    // если пара состоит в группе
    if (ageGroups[i].isInGroup(pairIvanAndElena)) {
      // вывести группу на экран
      std::cout << ageGroups[i] << std::endl;
    }
  }
 
  std::cin.peek();
  return 0;
}
Если опишите поставленную перед вами задачу более подробно, получите более конкретный пример.
0
0 / 0 / 0
Регистрация: 11.05.2011
Сообщений: 71
11.01.2013, 02:22  [ТС]
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
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
 
 
class Dancer
    
{
public:
//Dancer (char*, int*, char*)
//{}
 
    char FIOpartner[128];
    int grp;
    char FIOpartnersha[128];
 
    };
 
 
 
class Dancer_1 :  public Dancer
{
public:
    Dancer_1 (char*, int*)
    {}
    char vzCat;
    int colSor;
 
};
 
 
int getdata (Dancer & dnc)
{
    cout << "Vvedite FIO partnera: ";
    cin>>dnc.FIOpartner;
     if (stricmp(dnc.FIOpartner, "exit") ==0)
     {
     return 0;
     }
    cout<< "Vvedite got rojdenja partnera: ";
    cin>>dnc.grp;
    cout<< "Vvedite FIO partnershi: ";
    cin>>dnc.FIOpartnersha;
    return 1;
 
}
 
int getdata (Dancer_1 & dnc1)
{
    cout << "Vvedite vozrastnuy categoriy (yuniuru, molodej, proffesionallu: ";
    cin>>dnc1.vzCat;
    
    cout<< "Vvedite kolichestvo sorevnovanii v kotoruh para uchastvovala v etom gody: ";
    cin>>dnc1.colSor;
 
    return 1;
}
void displaydata (Dancer & dnc)
{
    cout << dnc.FIOpartner
        <<" "
        <<dnc.grp
        <<"/"
        <<dnc.FIOpartnersha;
        //<</n;
 
}
 
void displaydata (Dancer_1 & dnc1)
{
    cout << dnc1.vzCat;
    cout    <<" ";
        cout <<dnc1.colSor;
    
        //<<dnc.FIOpartnersha;
        //<</n;
}
 
int main (int nArg, char* pszArgs[])
{
    const int MAX = 3;
    Dancer dnc [MAX];
    cout << "Vvedite exit  dlja vuhoda v pole FIO partnera"<<endl;
    int index = 0;
    while (getdata(dnc[index]) && index <MAX)
    {
        index++;
    }
    //cout << dnc.FIOpartner<<dnc.grp<<dnc.FIOpartnersha;
    for (int i=0; i<index; i++)
    {
        displaydata(dnc[i]);
 
    }
    return 0;
}
Он выводит запрос о вводе информации основного класса :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int getdata (Dancer & dnc)
{
    cout << "Vvedite FIO partnera: ";
    cin>>dnc.FIOpartner;
     if (stricmp(dnc.FIOpartner, "exit") ==0)
     {
     return 0;
     }
    cout<< "Vvedite got rojdenja partnera: ";
    cin>>dnc.grp;
    cout<< "Vvedite FIO partnershi: ";
    cin>>dnc.FIOpartnersha;
    return 1;
 
}
существует такая же функция, только уже подкласса от Dancer, вот ее кусок, но почему она не выводит запрос о вводе "возрастной категории и количестве соревнований.."
C++
1
2
3
4
5
6
7
8
9
int getdata (Dancer_1 & dnc1)
{
    cout << "Vvedite vozrastnuy categoriy (yuniuru, molodej, proffesionallu: ";
    cin>>dnc1.vzCat;
    
    cout<< "Vvedite kolichestvo sorevnovanii v kotoruh para uchastvovala v etom gody: ";
    cin>>dnc1.colSor;
 
    return 1;
вообщем эта функция работает только у базового класса Dancer, а у его производного нет(Dancer_1).
Надеюсь доступно объяснила.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
11.01.2013, 02:35
Цитата Сообщение от pr1me222 Посмотреть сообщение
вообщем эта функция работает только у базового класса Dancer, а у его производного нет(Dancer_1).
а ты как объект объявляешь Dancer? или Dancer_1?
пример вызова функций

Добавлено через 2 минуты
Цитата Сообщение от pr1me222 Посмотреть сообщение
getdata (Dancer_1 & dnc1)
а вообще неплохо эту функцию в класс запихать тогда будет примерно так
C++
1
2
3
4
5
Dancer  dans;
Dancer_1 dans1;
....................
dans.getdata();
Dancer_1.getdata();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2013, 02:35
Помогаю со студенческими работами здесь

Работа с классами, наследованием и перегрузкой
Напишите программу с классом для реализации векторов в двумерном пространстве. У класса два поля (координаты вектора). Предусмотреть ...

Написать программу банкомат с наследованием и классами
Описать программу банкомат с наследованием классов. - снять (если возможно) заданную сумму с карточки; - перевести сумму со счета в...

Ошибки при работе программы
Помогите плиз народ срочно нужно. проверьте прогу. понять не могу по поводу ошибок ...

Ошибки при работе программы
Пишу программу-бота для личных нужд, собственно поэтому и зарегался на самом живом форуме. Дельфин ЕХ3, юзаю компонент TWebBrowser...

Структуры. Ошибки в работе программы
Компиляция проходит успешно. После запуска происходят различные ошибки. Наиболее частая- та, что на скриншоте. Подозрение падает на 37-ю...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru