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

передать указатель на локальную структуру в функцию

18.05.2021, 00:31. Показов 3382. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, всё перелопатил уже наверное, что только не искал, но ничего не работает. Суть задачи в том, что надо написать функцию, которая будет обеспечивать корректировку значений одного (произвольного) поля структуры. В целом я понимаю как это сделать и вроде даже правильно пишу, но у меня банально не получается передать указатель на структуру в функцию, я всяко разно уже пробовал, отчаялся и зарегистрировался тут, чтобы попросить у вас помощи.
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> 
#include<cstdio> 
#include<fstream>
#include<iomanip>
#include<string>
using namespace std;
void first(int, int, string, string);
void second(struct OS *x);
int main()
{
    setlocale(LC_ALL, "");
    struct OS {
        int version{};
        int digit{};
        string architecture;
        string name;
    } w1;
    struct OS *x;
    x = &w1;
    cout << "Введите версию: ";
    cin >> w1.version;
    cout << "Введите разрядность: ";
    cin >> w1.digit;
    cout << "Введите архитектуру: ";
    cin >> w1.architecture;
    cout << "Введите семейство: ";
    cin >> w1.name;
    second (&w1);
}
void second(struct OS *x) 
{
    int y;
    cin >> y;
    if (y == 1) {
        cout << "Введите новое значение для первого поля структуры";
        cin >> x->version;
    }
    else if (y == 3) {
        cout << "Введите новое значение для первого поля структуры";
        cin >> x->digit;
    }
    else if (y == 3) {
        cout << "Введите новое значение для первого поля структуры";
        cin >> x->architecture;
    }
    else if (y == 4) {
        cout << "Введите новое значение для первого поля структуры";
        cin >> x->name;
    }
    else
        cout << "Вводите только числа от 1 до 4!";
    }
Буду крайне благодарен, если поможете разобраться
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2021, 00:31
Ответы с готовыми решениями:

Как передать указатель на структуру в функцию
Подскажите как передать указатель *arr на структуру в функцию2, чтобы в ней использовать уже заполненные массивы: void func1() ...

Как передать в функцию указатель на структуру, если эта структура не определена глобально?
Проблема заключается в следующем: предположим есть некая структура, которая была определена внутри функции main. Далее я допустим хочу...

C# Подскажите как правильно передать указатель на структуру в функцию
Здравствуйте, возникли проблемы с переходом из С в С#, к сожалению синтаксис C# знаю плохо и сразу возник вопрос: Есть функция из...

10
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13182 / 6818 / 1821
Регистрация: 18.10.2014
Сообщений: 17,255
18.05.2021, 00:39
Цитата Сообщение от Roman07514 Посмотреть сообщение
передать указатель на локальную структуру в функцию
Что значит "на локальную"? У вас в коде не только объект w1 локален, но даже и сам тип struct OS локален. Зачем сам тип struct OS сделан локальным? Так нужно по заданию?

Локальный тип не будет виден никаким другим функциям, поэтому передать такой указатель в другие функции невозможно (без помощи хаков, полухаков и/или "костылей").
0
0 / 0 / 0
Регистрация: 18.05.2021
Сообщений: 9
18.05.2021, 00:41  [ТС]
да, по заданию сказано объявить и заполнить структурную переменную в главной функции
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13182 / 6818 / 1821
Регистрация: 18.10.2014
Сообщений: 17,255
18.05.2021, 00:42
Цитата Сообщение от Roman07514 Посмотреть сообщение
да, по заданию сказано объявить и заполнить структурную переменную в главной функции
Такая формулировка задания совсем не требует того, чтобы сам структурный тип объявлялся локально в главной функции. Вышепроцитированное требование относится к переменной, но не к типу.
0
0 / 0 / 0
Регистрация: 18.05.2021
Сообщений: 9
18.05.2021, 00:47  [ТС]
я просто не совсем понял что есть структурная переменная и чем она отличается от самой структуры, в материалах к заданию, которые мне дали, всё как-то очень мутно и написано одно поверх другого, по факту самому разобраться не особо получается, язык изучаю недели 2 всего, объясните что надо сделать, если не сложно, спасибо.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13182 / 6818 / 1821
Регистрация: 18.10.2014
Сообщений: 17,255
18.05.2021, 00:52
Лучший ответ Сообщение было отмечено Roman07514 как решение

Решение

Цитата Сообщение от Roman07514 Посмотреть сообщение
что надо сделать
Просто вынесите определение типа struct OS наружу за пределы функции main, чтобы все остальные функции пользовались уже известным типом.
1
0 / 0 / 0
Регистрация: 18.05.2021
Сообщений: 9
18.05.2021, 00:59  [ТС]
так и сделал уже, вроде понял что не так, пробую локально объявить переменную w1 таким образом
C++
1
 struct Os w1;
, выдает, что "w1" использует не имеющую определения структуру struct "main::Os", т.е мне структуру два раза надо определить или что?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13182 / 6818 / 1821
Регистрация: 18.10.2014
Сообщений: 17,255
18.05.2021, 01:02
Цитата Сообщение от Roman07514 Посмотреть сообщение
выдает, что "w1" использует не имеющую определения структуру struct "main::Os"
Я не вижу отсюда, что вы там такое странное натворили, чтобы получить такую ошибку.
1
0 / 0 / 0
Регистрация: 18.05.2021
Сообщений: 9
18.05.2021, 01:05  [ТС]
Извиняюсь, вот код
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
#include<iostream> 
#include<cstdio> 
#include<fstream>
#include<iomanip>
#include<string>
using namespace std;
struct OS {
    int version{};
    int digit{};
    string architecture;
    string name;
};
void first(int, int, string, string);
void second(struct OS *x);
int main()
{
    setlocale(LC_ALL, "");
    struct Os w1;
    struct OS *x;
    x = &w1;
    cout << "Введите версию: ";
    cin >> w1.version;
    cout << "Введите разрядность: ";
    cin >> w1.digit;
    cout << "Введите архитектуру: ";
    cin >> w1.architecture;
    cout << "Введите семейство: ";
    cin >> w1.name;
 
    second (&w1);
}
 
void second(struct OS *x) 
{
    int y;
    cin >> y;
    if (y == 1) {
        cout << "Введите новое значение для первого поля структуры";
        cin >> x->version;
    }
    else if (y == 3) {
        cout << "Введите новое значение для первого поля структуры";
        cin >> x->digit;
    }
    else if (y == 3) {
        cout << "Введите новое значение для первого поля структуры";
        cin >> x->architecture;
    }
    else if (y == 4) {
        cout << "Введите новое значение для первого поля структуры";
        cin >> x->name;
    }
    else
        cout << "Вводите только числа от 1 до 4!";
    }
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13182 / 6818 / 1821
Регистрация: 18.10.2014
Сообщений: 17,255
18.05.2021, 01:17
Цитата Сообщение от Roman07514 Посмотреть сообщение
вот код
И? Вы не в состоянии без помощи форума заметить и исправить обычную элементарную опечатку? При этом компилятор уже указал вам, где она.
1
0 / 0 / 0
Регистрация: 18.05.2021
Сообщений: 9
18.05.2021, 01:19  [ТС]
фейспалм, увидел, спасибо за помощь, извиняюсь за тупость.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.05.2021, 01:19
Помогаю со студенческими работами здесь

Как передать указатель на конкретную функцию через указатель?
Здравствуйте, подскажите пожалуйста. Напишите функцию, строящую график заданной функции на заданном интервале изменения ...

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...

Передать библиотеке указатель на структуру
Как передать библиотеке указатель на структуру ну и что нибудь с ней сделать, например какому нибудь члену значение увеличить, ато у меня...

Как передать указатель на структуру?
Добрый день, господа. Прошу помощи сообщества по следующему вопросу. Срочно нужна помощь. Написана DLL, если честно, то на Delphi...

Передать указатель на структуру в параметре функции
Есть структура struct Test{ BYTE Size; BYTE* Mass; }; На чистом Си нужно передавать указатель на нее в параметре функции,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru