Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 34

Как скрыть поле для файла main?

24.09.2014, 02:16. Показов 2018. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Есть два файла: main и device. В device имеется определение структуры:
C++
1
2
3
4
5
6
typedef struct
{
    int a;
    float b;
    void (* Init)(void); // указатель на функцию инициализации устройства
}Device;
В main я создаю экземпляр этой структуры, но не хочу, чтобы Init был виден из main-а (а в редакторе он сейчас подсвечивается, мол, вижу это поле в структуре).
Как скрыть это поле для файла main?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.09.2014, 02:16
Ответы с готовыми решениями:

Как скрыть поле в сводной таблице?
В области СТРОКИ есть ПОЛЕ "Номер" как его скрыть? Например 1 Иванов 20 2 Петров 30 3 Иванов 40 Нужно чтоб было: ...

Как скрыть поле формы file
У меня такая ситуация, в модальном окне должна быть кнопка Выбрать фото (выглядит она просто как прямоугольник с текстом внутри), при...

Как правильно скрыть Ruchtext поле?
Как правильно скрыть RuchText поле?

24
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
24.09.2014, 15:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Arlleex Посмотреть сообщение
Как скрыть это поле для файла main?
Никак, ищите другое архитектурное решение.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
24.09.2014, 16:03
Цитата Сообщение от Arlleex Посмотреть сообщение
не хочу, чтобы Init был виден из main-а
Вообще можно сделать следующее: вынести описание в хэдер, а в хэдере описать его так:
C
1
2
3
4
5
6
7
8
typedef struct
{
  int a;
  float b;
#ifdef HARDWARE_CONTROL
  void (* Init)(void); // указатель на функцию инициализации устройства
#endif
}Device;
В этом случае доступ можно получить только взведя дефайн перед инклудом данного хэдера. Но нафиг так жить...
0
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 34
24.09.2014, 16:31  [ТС]
Универсальность. У одного объекта куча методов, но не все методы доступны из разных файлов.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
24.09.2014, 16:50
Цитата Сообщение от Arlleex Посмотреть сообщение
Универсальность.
Это не универсальность, а, извините, фигня. Это даже в концепцию ООП не вписывается. Есть ЯП, а вы про файлы. Язык не в курсе про ваши файлы, и уж тем более про действия пользователя. Вы можете ограничить пользователя и его действия логикой и архитектурой (на худой конец костылями на ЯП как я показал, но как это будет работать, если вообще будет, никто не скажет), но вы не сможете ограничить его в рамках уровня исходных текстов раз они у него на руках.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
24.09.2014, 17:23
Цитата Сообщение от Arlleex Посмотреть сообщение
но не все методы доступны из разных файлов.
Их можно просто вынести в процедуры, которых не будет в заголовочном файле. Типа того:

device.h:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef H_DEVICE
#define H_DEVICE
 
typedef struct Device Device;
 
struct Device
{
    int   x;
    float y;
    void (*println) (Device*); // public method
};
 
#endif
device_a.h:
C
1
2
3
#include "device.h"
 
void initDeviceA(Device*);
device_b.h:
C
1
2
3
#include "device.h"
 
void initDeviceB(Device*);
device_a.c:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
#include "device_a.h"
 
void
DeviceA_print(Device *d) // private "method"
{
    printf("A{ x = %d; y = %f }", d->x, d->y);
}
 
void
DeviceA_println(Device *d)
{
    DeviceA_print(d);
    printf("\n");
}
 
void
initDeviceA(Device *d)
{
    d->println = DeviceA_println;
}
device_b.c:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
#include "device_b.h"
 
void
DeviceB_print(Device *d) // private "method"
{
    printf("B[ x: %d, y: %f ]", d->x, d->y);
}
 
void
DeviceB_println(Device *d)
{
    DeviceB_print(d);
    printf("\n");
}
 
void
initDeviceB(Device *d)
{
    d->println = DeviceB_println;
}
main.c:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "device_a.h"
#include "device_b.h"
 
int
main(void)
{
    Device a, b;
    initDeviceA(&a);
    initDeviceB(&b);
    a.x = 1; a.y = 2;
    b.x = 3; b.y = 4;
    a.println(&a);
    b.println(&b);
 
    return 0;
}
Bash
1
2
3
4
5
6
7
8
% tcc -c device_a.c
 
% tcc -c device_b.c
 
% tcc main.c device_a.o device_b.o
% main
A{ x = 1; y = 2.000000 }
B[ x: 3, y: 4.000000 ]
Уродски конечно, но это ж Си. Лучше действительно пересмотреть архитектуру, как советовали выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2014, 17:23

Как передать (или присвоить) имя в поле класса из main?
Листинг: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class Myname { string name; int old; Myname(string...

Как скрыть поле из бд после выполнения функции
Здравствуйте, у меня есть система тестирования и я хочу добавить возможность, чтобы после того как человек наберет определенное количество...

Как нажатием кнопки скрыть текстовое поле?
Добрый день! Ситуация такая: есть 2 текстовых поля, которые пользователь должен заполнить и одна кнопка проверки. Если поля...

Как скрыть моргающую каретку в поле Edit
Есть поле Edit1, хочу туда залить цвет, но всю картину портит моргающая каретка. Есть рекомендации для сокрытия каретки: ...

Как можно скрыть поле и его подпись в форме?
Как можно скрыть поле и его подпись в форме? Заранее спасибо.


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru