0 / 0 / 0
Регистрация: 29.05.2018
Сообщений: 20
1

Неправильная передача аргументов конструктора класса

22.03.2019, 01:32. Показов 784. Ответов 5
Метки нет (Все метки)

Есть несколько конструкторов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    student(char* name, char* group, int course, int marks[5]){
        strcpy(FIO, name);
        strcpy(this->group, group);
        this->course=course;
        for (int i=0; i<5; i++)
            this->marks[i]=marks[i];
    }
    student(char *name, student &st, int marks[5]){
        strcpy (FIO, name);
        strcpy (st.group, group);
        course=st.course;
        for (int i=0; i<5; i++)
            this->marks[i]=marks[i];
    }
    student(char *name, student &st){
        strcpy(FIO, name);
        strcpy(st.group, group);
        course=st.course;
        for (int i=0; i<5; i++)
            marks[i]=st.marks[i];
    }
есть функция, которая принимает в качестве аргументов указатель на массив объектов класса, которому принадлежат эти конструкторы:
C++
1
2
3
void student(student *students){
    //.........
}
хочу инициализировать элементы массива:
C++
1
students[i]=student(Name,Group,Course,Marks);
компилятор выдает ошибку:
C++
1
ошибка: cannot convert <<char*>> to <<student*>>
Как правильно инициализировать массив объектов в функции?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2019, 01:32
Ответы с готовыми решениями:

Шаблон класса, передача аргументов
Есть шаблон класса, аргументы для создания класса константные itk::Vector &lt;float,ch &gt; шаблон...

Изменение параметров конструктора без аргументов
Как в конструкторе без параметров изменить значения из функции main?

Как узнать количество аргументов конструктора?
Добрый день. Как на этапе компиляции узнать, сколько аргументов имеет конструктор некоторого...

Потоки с стандарте C++ 11. Отсутствуют экземпляры конструктора, соответствующие списку аргументов
Tvector.push_back(thread(threadFunction,mas,i,3,4,76,55)); сама функция void threadFunction(int...

5
2548 / 1207 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
22.03.2019, 01:58 2
IDABSENT, мало информации и кода. И любая ошибка указывает на строку
0
0 / 0 / 0
Регистрация: 29.05.2018
Сообщений: 20
22.03.2019, 02:09  [ТС] 3
К коду у меня сейчас нет прямого доступа, поэтому скинуть его весь не смогу. Но постараюсь уточнить важное:
1. В программе 3 варианта инициализации элемента-объекта массива. В каждой из которых первой передаётся переменная Name. Ошибка указывает на все 3 инициализации.
2. Типы передаваемых переменных: char, char, student, int
Не достаточно?
0
5192 / 2859 / 1193
Регистрация: 07.02.2019
Сообщений: 7,223
22.03.2019, 02:32 4
del
0
nd2
3427 / 2806 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
22.03.2019, 03:21 5
Цитата Сообщение от IDABSENT Посмотреть сообщение
есть функция, которая принимает в качестве аргументов указатель на массив объектов класса,
И как этот массив объявлен?
Цитата Сообщение от IDABSENT Посмотреть сообщение
Есть несколько конструкторов
По умолчанию есть?
Цитата Сообщение от IDABSENT Посмотреть сообщение
Не достаточно?
В какой строке ошибка возникает?
0
0 / 0 / 0
Регистрация: 29.05.2018
Сообщений: 20
22.03.2019, 04:28  [ТС] 6
Вот весь код(main empty):
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
class student{
    char FIO[40], group[4];
    int course, label, marks[5];
public:
    student(char* name, char* group, int course, int marks[5]){
        strcpy(FIO, name);
        strcpy(this->group, group);
        this->course=course;
        for (int i=0; i<5; i++)
            this->marks[i]=marks[i];
    }
    student(char *name, student &st, int marks[5]){
        strcpy (FIO, name);
        strcpy (st.group, group);
        course=st.course;
        for (int i=0; i<5; i++)
            this->marks[i]=marks[i];
    }
    student(char *name, student &st){
        strcpy(FIO, name);
        strcpy(st.group, group);
        course=st.course;
        for (int i=0; i<5; i++)
            marks[i]=st.marks[i];
    }
    void setLabel(){
        label=1; int mark_5=0;
        for (int i=0; i<5; i++)
            if (marks[i]<=3) label=0; else if (marks[i]==5) mark_5++;
        if (mark_5==5) label=3;
    }
    void printinf(){
        cout<<"Имя студента: "<<FIO<<endl;
        cout<<"Курс студента: "<<course<<endl;
        cout<<"========Оценки студента======="<<endl;
        for (int i=0; i<5; i++)
            cout<<"\t\t"<<marks[i];
        cout<<endl;
    }
    int retLabel(){
        return label;
    }
};
int retstudents(){
    int number;
    cout<<"Введите количество студентов в группе: ";
    cin>>number; return number;
    }
void student(student *students){
    char Group[5], Name[40]; 
    int Marks[5], Course, label;
    for (int i=0; i<n; i++){
        cout<<"=======Ввод данных "<<i+1<<"-го студента======="<<endl;
        cout<<"Введите ФИО(англ.): "; cin>>Name;
        cout<<"Данные студента совпадают с данными прежних студентов?\n";
        cout<<"1 - оценки, курс, группа | 2 - курса, группа | 3 - нет";
        cin>>label;
        do{ 
            int number;
            switch(label){
            case 0:
                cout<<"Номер группы(англ.): "; cin>>Group;
                cout<<"Обучается на курсе: "; cin>>Course;
                cout<<"=======ввод оценок студента========"<<endl;
                for (int j=0; j<5; j++){
                    cout<<j+1<<"-я оценка: "; cin>>Marks[j];
                }
                students[i]=student(Name,*Group,Course,Marks);
                break;
            case 1:
                cout<<"Номер студента: "; cin>>number;
                students[i]=student(Name, students[number-1]);
                break;
            case 2:
                cout<<"=======Ввод оценок студента======="<<endl;
                for (int j=0; i<5; i++){
                    cout<<j+1<<"-ая оценка: "; cin>>Marks[j];
                }
                cout<<"Номер прежнего студента: "; cin>>number;
                students[i]=student(Name, students[number-1], Marks[5]);
                break;
            default:
                cout<<"Введена неверная цифра. Повторите попытку.";
                break;
            }
        }while (label!=1 || label!=2 || label!=0);
        students[i].setLabel();
    }
    cout<<"| Вывод информации о студентах\n";
    cout<<"\t| 1 - информация о студентах с повышенной на 50% стипендией\n";
    cout<<"\t| 2 - информация о студентах с повышенной на 25% стипендией\n";
    cout<<"\t| 3 - информация о студентах с обычной стипендией\n";
    bool cont;
    do{
        cin>>label;
        switch (label){
            case 1:
                for (int i=0; i<n; i++)
                    if (students[i].retLabel()==3) students[i].printinf();
                break;
            case 2:
                for (int i=0; i<n; i++)
                    if (students[i].retLabel()==2) students[i].printinf();
                break;
            case 3:
                for (int i=0; i<n; i++)
                    if (students[i].retLabel()==1) students[i].printinf();
                break;
            default:
                cout<<"Введено неверное число.";
        }
        cout<<"1 - продолжить | 0 - прекратить"; cin>>cont;
    }while(cont==1);
};
Добавлено через 4 минуты
Понял ошибку
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2019, 04:28
Помогаю со студенческими работами здесь

Потоки. Ошибка отсутствуют экземпляры конструктора, соответствующие списку аргументов
void Engine::run() { long startTime; long timeMillis; long waitTime; long totalTime =...

Вызвать конструктор производного класса без конструктора базового класса
Здравствуйте! У меня есть базовый класс треугольник и производный класс равносторонний...

Вызов конструктора базового класса из класса-наследника
Можно ли вне списка инициализации вызвать конструктор базового класса ? class A { int a;...

Чем отличается метод класса от конструктора класса?
В ООП, чем отличается метод класса от конструктора класса? Для чего нужен конструктор класса?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru