Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95

Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях?

12.09.2011, 12:50. Показов 4015. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Имеется класс декларированный в одном модуле (файле), а нужно использовать его функции-члены в другом. Есть общий .h файл.
Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях?
Заранее благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2011, 12:50
Ответы с готовыми решениями:

Динамическое выделение памяти - сделать так, чтобы переменная стала видимой во всем коде
У меня вопрос в том как сделать так чтобы plus стал видимым во всем коде а не только в блоке. Дело в том что мне нужно чтобы его размер...

Как сделать кнопку видимой-не видимой?
Как сделать кнопку видимой-не видимой?

Поиск текста во всем проекте, во всех классах Android Studio
Здравствуйте, можно ли как-то по выделенному или заданному фрагменту текста(например setOnTouch), найти его во всех java классах в...

10
 Аватар для RaiaNKnight
97 / 71 / 12
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
12.09.2011, 13:44
В каждом модуле следует сделать #include <UnitX.h>
После объявить в хэдер-файле какого-либо модуля классовую переменную, н-р, NameClass *NameVar;
Потом в нужном месте программы объявляется: NameVar = new NameClass(); В скобках необходимо указать параметры, которые передаются конструктору класса, если они нужны.
Через эту переменную, через -> обращаться к нужным полям и методам класса. Например:
NameVar->NameOfMethod(); в скобках также необходимые для вызова метода параметры
0
 Аватар для Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 14:00  [ТС]
что то не совсем понял. Для того чтобы разговор был предметным, приведу сюда куски проекта.

есть заголовочный файл:
functions.h
на него ссылаются файлы:
main.cpp
gui.cpp
math-related.cpp
controls.cpp

в файле functions.h описан класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct btn_color
{
    float r;
    float g;
    float b;
};
 
class Button
{
 public:
    Button(short pos_x,short pos_y, short button_width, short button_height, void(*onclick)(void));
    void draw(void);
    void check(void);
 private:
    short x,y,width,height;
    void *callback;
    struct btn_color *color;
    struct btn_color normal;
    struct btn_color hover;
    struct btn_color pressed;
};
описания функций-членов класса находяться в файле gui.cpp
а сам класс для использования деклалируется в controls.cpp
C++
1
2
void clicked(){};
Button testing(100,100,100,50,clicked);
и там же (controls.cpp) используется функция член(testing.check()) в одной функции.
после чего мне нужно использовать функцию член(testing.draw()) в main.cpp, но вот тут то я и получаю сообщение что класс не был определен.

можно на примере моих файлов обьяснить что и как сделать чтобы его было видно?
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
12.09.2011, 14:11
Цитата Сообщение от Razzeeyy Посмотреть сообщение
после чего мне нужно использовать функцию член(testing.draw()) в main.cpp, но вот тут то я и получаю сообщение что класс не был определен.
Покажите сообщение об ошибке.
1
 Аватар для Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 14:22  [ТС]
||=== math, Debug ===|
/home/razzeeyy/workspace/codeblocks/math/main.cpp||In function ‘void Display()’:|
/home/razzeeyy/workspace/codeblocks/math/main.cpp|23|error: ‘testing’ was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
12.09.2011, 14:38
Если правильно понял, то проблема не в том, что класс не виден, а в том, что внутри функции Display() не виден объект testing. А где он создаётся?
1
 Аватар для Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 14:52  [ТС]
>>а сам класс для использования деклалируется в controls.cpp

неправильно выразился, создается в controls.cpp
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
12.09.2011, 14:56
Цитата Сообщение от Razzeeyy Посмотреть сообщение
>>а сам класс для использования деклалируется в controls.cpp
неправильно выразился, создается в controls.cpp
Так создаются объекты, а не классы. Он там в глобальной области видимости создан? Тогда, наверное, нужно добавить его объявление с ключевым словом extern (видимо в заголовочный файл или в те модули, где он используется)
1
 Аватар для Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 14:58  [ТС]
это должно выглядеть как

extern testing;

или

extern Button testing; ?
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
12.09.2011, 15:08
C++
1
extern Button testing;
1
 Аватар для Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 15:25  [ТС]
Всё, помогло, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.09.2011, 15:25
Помогаю со студенческими работами здесь

Сделать, чтобы музыка играла во всем проекте
всем хай! Как сделать чтобы музыка играла во всем проекте?? я вот так пилю в первой форме но она не играет private void...

Сделать переменную видимой для всех страниц
На главной странице создаётся переменная. Как сделать её видимой для всех страниц. Задача на моём сайте стоит такая: Загружается...

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

Как установить MSSQLEXPRESS на windows 2012, и сделать его видимым всем ?
В общем снес я всю свою старую систему... Раньше, учился я на локальном сервере , но теперь.. Так как имеется в распоряжении хороший...

Как объявить переменную, доступную во всех модулях?
К примеру есть три файла: #a.py import main def aDef(): main.q = q+5 #b.py


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru