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

Неправильно пишу функцию, но не понимаю, в чем проблема

19.06.2020, 13:49. Показов 490. Ответов 2

Студворк — интернет-сервис помощи студентам
Создал массив объектов класса, создал функцию увеличения кол-ва элементов на 1(она не работает). В отладчике при присваивании значении полю name пишется ошибка при чтении символов строки. Я увеличиваю кол-во элементов в массиве и присваиваю новому элементу поля, но выдает ошибку, не понимаю, в чем проблема, прошу, помогите.

student.h
=============================
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
#pragma once
#include <string>
#include <iostream>
 
 
class Student
{
public:
    Student();
 
    void SetName(); //Get the Name
    void SetGroup();            //Get the number of Group
    void SetMarks();        //Get the marks
 
    //Student& operator = (Student);
 
 
 
    ~Student    ();
private:
    std::string Name;
    int Group;
    int Marks[5];
};
=============================
Student.cpp
=============================
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 "Student.h"
 
 
 
 
Student::Student()
{
}
 
void Student::SetName()     //Inicialization the name
{
    std::cout << "Enter the student's name" << std::endl;
    std::string name;
    std::cin >> name;
    this->Name = name;
}
 
void Student::SetGroup()                //Inicialization the number of group
{
    int num;
    std::cout << "Enter the group number" << std::endl;
    std::cin >> num;
    this->Group = num;
}
 
void Student::SetMarks()                    //Inicialization the marks
{
    std::cout << "Enter five marks"<< std::endl;
    for (int i = 0, mark; i < 5; i++)
    {
        std::cout << i + 1 << " - ";
        std::cin >> mark;
        Marks[i] = mark;
    }
}
 
//Student & Student::operator=(Student info)
//{
//  this->Name = info.Name;
//  this->Group = info.Group;
//  this->Marks[5] = info.Marks[5];
//  return *this;
//}
 
 
 
 
Student::~Student()
{
}
=============================
Main.cpp
=============================
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 <string>
#include "Student.h"
 
using namespace std;
 
void AddStudent(Student* student, int size)   // not work
{
    size += 1;
    Student* CopyStudent = new Student[size + 1];
    for (int i = 0; i < size; i++)
    {
        CopyStudent[i] = student[i];
        
    }
    delete[] student;
    student = CopyStudent;
}
 
int main()
{
    Student* student = new Student[1];
    bool permition;
    int size = 1;
    
 
    for (int i = 0; i < size; i++)
    {
        cout << "Enter 1 to create a new student or enter 0 to compleate the creation" << endl;
        cin >> permition;
 
        if (permition)
        {
            
            student[i].SetName();
            student[i].SetGroup();
            student[i].SetMarks();
            AddStudent(student, i);
            size++;
        }
        else
            break;
    }
    system("pause");
}
=============================
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.06.2020, 13:49
Ответы с готовыми решениями:

Не понимаю в чем ошибка. Неправильно считает количество повторений
Вот код. Программа должна считывать 4 числа, и выводить кол-во повторений. Она выводит, но неправильно, когда 2 повторения выводит 6. ...

Не понимаю в чем проблема
вроде как создал диалоговое окно в котором должно быть две кнопки Left и Right , но при вызове этого окна оно открывается и сразу же...

Игра змейка, не понимаю в чём проблема
Ошибок компиляторн не видит, но оно не работает.. Помогите, пожалуйста! #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

2
151 / 103 / 49
Регистрация: 21.11.2019
Сообщений: 285
19.06.2020, 14:09
Предположу, что тут подправить стоит

C++
1
2
3
4
5
6
student[i].SetName();
student[i].SetGroup();
student[i].SetMarks();
AddStudent(student, i+1);
size++;
}
0
0 / 0 / 0
Регистрация: 30.05.2020
Сообщений: 4
20.06.2020, 02:09  [ТС]
Цитата Сообщение от Shut913 Посмотреть сообщение
Предположу, что тут подправить стоит
Да, так можно сделать, так даже будет логически правильнее, чтобы функция не делала всё и сразу, но тогда в самой функции нужно стереть
Цитата Сообщение от Susanich Посмотреть сообщение
size += 1;
чтобы не выйти за границу динамического массива

======================================== ======================================== =================================

Добавлено через 8 минут
В общем, может кому-то пригодится.
Я нашел ошибку в коде, в функции AddStudent нужно передавать не указатель на массив:
C++
1
void AddStudent(Student* student, int size)
А указатель на ссылку:
C++
1
void AddStudent(Student* &student, int size)
Чтобы непосредственно переприсвоить адрес самого указателя на массив:
C++
1
student = CopyStudent;
Иначе, полагаю, если передавать параметр через указатель, меняем адрес только 1-ого элемента массива(Кто точно знает, можете меня поправить, если неправ)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2020, 02:09
Помогаю со студенческими работами здесь

Найти среднее значение.Не понимаю в чем проблема
Даны три числа. Найти среднее из них (то есть число, содержащееся между наименьшим и наибольшим). using System; using...

Найти среднее значение. Не понимаю в чем проблема
Даны три числа. Найти среднее из них (то есть число, содержащееся между наименьшим и наибольшим). using System; using...

На VS 2019 работает, на VS 2017 не хочет, в чем проблема я не понимаю
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

Неправильно считает дискриминант в чем проблема?
internal double ttyty(int a3, int b3, int c3,out double x1,out double x2) { x1 = x2 = 0; double d3 =...

Проблема с ссылками или еще чем (я не очень понимаю проблему)
Есть 1 маленькая проблема В Mahapps.Metro есть ShowMessageAsync и его можно вызвать только в MetroWindow. У меня всякие действия и...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере 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