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

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

Войти
Регистрация
Восстановить пароль
 
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
#1

Удаление переменной структуры - C++

06.09.2014, 22:32. Просмотров 616. Ответов 15
Метки нет (Все метки)

Здравствуйте! Можете пожалуйста объяснить как удалить переменную структуры study1?
Смотрел похожие темы и по существу ничего не нашел.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
struct study
{
    char namef[30];
    char sname[50];
    int rate;
    int group;
    int numgeo;
    int nummath;
    int ua;
}  study1, study2, study3, study4, study5;
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6840 / 4051 / 924
Регистрация: 30.01.2014
Сообщений: 6,855
07.09.2014, 00:33     Удаление переменной структуры #2
Fake13, лучше набросай коротенький пример, демонстрирующий то, что ты хочешь получить.
А то в исходной постановке ответ на твой вопрос - "никак".
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 09:23  [ТС]     Удаление переменной структуры #3
Если у студента двойки по таким предметам, то if-условие удовлетворено, оно выводит на экран сообщение и после этого надо добавить удаление структурной переменной (Study1) из общей структуры(Study), можно сказать, что просто имитируется отчисление. Просто не сильно понял как это сделать, только с помощью указателей?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
}  study1, study2, study3, study4, study5;
 
// Ввод данных я упущу. 
 
if (study1.numgeo && study1.nummath == 2)
{
cout << "Cтудент " << study1.sname << " имеет две и более двойки." << endl;
//Тут надо дописать удаление структурной переменной study1 из структуры Study. 
}
Melg
537 / 158 / 64
Регистрация: 23.09.2013
Сообщений: 314
07.09.2014, 09:48     Удаление переменной структуры #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В силу определенных причин давно никому не отвечал - не было сил помогать. Вы будете первым. Давайте попробуем разобраться в синтаксисе объявления структур в языке:
C++
1
2
3
4
struct <имя>
{
    <тело>
}<переменные>;
В вашем случае имя нового пользовательского типа данных "study", тело пользовательского типа данных состоит из публичных полей:
C++
1
2
3
4
5
6
7
    char namef[30];
    char sname[50];
    int rate;
    int group;
    int numgeo;
    int nummath;
    int ua;
А study1, study2, study3, study4, study5 - переменные, тип которых - study. В зависимости где было произведено объявление структуры - переменные были созданы либо в глобальной области видимости ( если структура объявлена вне main, либо в области видимости main. Память под переменные была выделена на стеке и будет автоматически освобождена при выходе из области видимости. При этом - переменные никак не включены в структуру, они имеют тип этой структуры, но структура не является контейнером для этих переменных.

Это равносильно постановке вопроса :
C++
1
2
int number1, number2, number3; 
// как вот тут удалить number1 из int
Ответ очевиден - никак, вопрос не корректен, переменная не помещается в тип данных, которому она соответствует.
Я советую Вам прочитать про массивы и контейнеры стандартной библиотеки - такие как std::vector.
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 10:02  [ТС]     Удаление переменной структуры #5
Melg, спасибо больше за содержательный ответ, все понял.
zss
Модератор
Эксперт С++
6181 / 5784 / 1872
Регистрация: 18.12.2011
Сообщений: 14,779
Завершенные тесты: 1
07.09.2014, 10:35     Удаление переменной структуры #6
А динамически?
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
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
};
 int main()
{
  study* study1=new study;
  study* study2=new study;
  study* study3=new study;
  study* study4=new study;
  study* study5=new study;
// Ввод данных я упущу. 
 
if (study1->numgeo==2 && study1->nummath == 2)
{
cout << "Cтудент " << study1->sname << " имеет две и более двойки." << endl;
//Тут надо дописать удаление структурной переменной study1 из структуры Study.
    delete study1; 
}
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 10:46  [ТС]     Удаление переменной структуры #7
zss, подчеркивает
C++
1
delete study1;
и пишет "Выражение должно иметь тип указателя".
zss
Модератор
Эксперт С++
6181 / 5784 / 1872
Регистрация: 18.12.2011
Сообщений: 14,779
Завершенные тесты: 1
07.09.2014, 10:50     Удаление переменной структуры #8
Цитата Сообщение от zss Посмотреть сообщение
study* study1=new study;
study* означает, что study1 имеет тип указателя. Проверьте наличие звездочки
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 10:52  [ТС]     Удаление переменной структуры #9
Я понимаю, звездочка есть, все как в примере, точнее я скопировал код и выдает ошибку.
zss
Модератор
Эксперт С++
6181 / 5784 / 1872
Регистрация: 18.12.2011
Сообщений: 14,779
Завершенные тесты: 1
07.09.2014, 11:00     Удаление переменной структуры #10
Приведите полный код того, что компилируете.
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 11:26  [ТС]     Удаление переменной структуры #11
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
#include <iostream>
#include <ctime>
#include <cstring>
 
using namespace std;
void input();
void sort();
void menu();
void first();
 
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
}  study1, study2, study3, study4, study5;
int main()
{
setlocale(LC_ALL, "RUS");
    
    menu();
    study* study1 = new study;
    study* study2 = new study;
    study* study3 = new study;
    study* study4 = new study;
    study* study5 = new study;
 
    system("pause");
    return 0;
} 
void input() // функции расписывать не буду, так как ошибка именно в if
 
if ((study1->numgeo && study1->nummath == 2 && stricmp(study1->namef, "ПОМ")) || (study1->numgeo && study1->ua == 2 && stricmp(study1->namef, "ПОМ")) || (study1->nummath && study1->ua == 2 && stricmp(study1->namef, "ПОМ")))
        {
            cout << "Cтудент " << study1.sname << " имеет две и более двойки." << endl;
            delete study1;
        }
KOPOJI
Модератор
Эксперт PHP
16647 / 6588 / 419
Регистрация: 12.06.2012
Сообщений: 19,791
Завершенные тесты: 1
07.09.2014, 11:45     Удаление переменной структуры #12
Цитата Сообщение от Fake13 Посмотреть сообщение
} *study1
Цитата Сообщение от Fake13 Посмотреть сообщение
study* study1
Измените объявление структуры на такое
C++
1
2
3
4
5
6
7
8
9
10
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
};
Как один из вариантов, конечно

Ну или наоборот
C++
1
2
3
4
5
6
7
8
9
10
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
}  *study1, *study2, *study3, *study4, *study5;
А потом так
C++
1
2
3
4
5
study1 = new study;
    study2 = new study;
    study3 = new study;
    study4 = new study;
    study5 = new study;
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.09.2014, 11:48     Удаление переменной структуры #13
Цитата Сообщение от Fake13 Посмотреть сообщение
я скопировал код и выдает ошибку
Криво скопировали. У zss код находится внутри функции main, у Вас же совершенно в неподходящем для этого месте.

Добавлено через 2 минуты
P.S. создавать множество однотипных объектов, объявляя для этого множество однотипных же переменных совершенно не подходящий подход. Лучше даже не пытаться это делать, а освоить такие понятия как "массив", "список" и прочие контейнерные классы.
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 12:47  [ТС]     Удаление переменной структуры #14
Только учусь потому и использую пока что не рациональные способы. У меня структура глобальная, она не находится в какой-либо функции, а динамику я засунул в main. KOPOJI, сделал так, как Вы говорили, все работает, но при вводе информации выкидывает ошибку нарушения прав доступа при записи по адресу. Надо указатели подучить.
KOPOJI
Модератор
Эксперт PHP
16647 / 6588 / 419
Регистрация: 12.06.2012
Сообщений: 19,791
Завершенные тесты: 1
07.09.2014, 15:00     Удаление переменной структуры #15
Fake13, видимо, вы опять что-то неверно сделали.
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
#include <iostream>
 
struct study
{
    const char *name;
    size_t mark;
} *study4, *study5, *study6;
 
int main(int argc, char *argv[])
{
    study* study1 = new study;
    study* study2 = new study;
    study* study3 = new study;
    study4 = new study;
    study5 = new study;
    study6 = new study;
 
    study1->name = "Student1";
    study1->mark = 5;
 
    study2->name = "Student2";
    study2->mark = 4;
 
    study3->name = "Student3";
    study3->mark = 3;
 
    study4->name = "Student4";
    study4->mark = 5;
 
    study5->name = "Student5";
    study5->mark = 2;
 
    study6->name = "Student6";
    study6->mark = 4;
 
    std::cout << study1->name << " => " << study1->mark << std::endl;
    std::cout << study2->name << " => " << study2->mark << std::endl;
    std::cout << study3->name << " => " << study3->mark << std::endl;
    std::cout << std::endl;
    std::cout << study4->name << " => " << study4->mark << std::endl;
    std::cout << study5->name << " => " << study5->mark << std::endl;
    std::cout << study6->name << " => " << study6->mark << std::endl;
 
    delete(study1);
    delete(study2);
    delete(study3);
    delete(study4);
    delete(study5);
    delete(study6);
 
    std::cin.get();
}
Удаление переменной структуры

З.Ы. Вообще, лучше создать массив структур вместо кучи переменных..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2014, 19:54     Удаление переменной структуры
Еще ссылки по теме:

Удаление элемента структуры C++
C++ Удаление структуры по определенному полю.
C++ Возможно ли циклом менять название переменной структуры?
C++ Удаление динамической структуры
C++ Удаление элемента структуры из файла

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

Или воспользуйтесь поиском по форуму:
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 19:54  [ТС]     Удаление переменной структуры #16
Спасибо, тему можно закрывать. Сделаю все как массив структур.
Yandex
Объявления
07.09.2014, 19:54     Удаление переменной структуры
Ответ Создать тему
Опции темы

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