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

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

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


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

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

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

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

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

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

есть заголовочный файл:
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
Эксперт С++
2193 / 1611 / 254
Регистрация: 29.05.2011
Сообщений: 3,306
12.09.2011, 14:11 4
Цитата Сообщение от Razzeeyy Посмотреть сообщение
после чего мне нужно использовать функцию член(testing.draw()) в main.cpp, но вот тут то я и получаю сообщение что класс не был определен.
Покажите сообщение об ошибке.
1
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 14:22  [ТС] 5
||=== 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
Эксперт С++
2193 / 1611 / 254
Регистрация: 29.05.2011
Сообщений: 3,306
12.09.2011, 14:38 6
Если правильно понял, то проблема не в том, что класс не виден, а в том, что внутри функции Display() не виден объект testing. А где он создаётся?
1
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 14:52  [ТС] 7
>>а сам класс для использования деклалируется в controls.cpp

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

extern testing;

или

extern Button testing; ?
0
Эксперт С++
2193 / 1611 / 254
Регистрация: 29.05.2011
Сообщений: 3,306
12.09.2011, 15:08 10
C++
1
extern Button testing;
1
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 15:25  [ТС] 11
Всё, помогло, спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2011, 15:25

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

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

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

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

Как правильно создать экземпляр класса для доступа к его свойствам
Всем доброго времени суток. Сижу уже долго над этим участком. У меня есть класс Pinball, я создаю...

Как правильно сделать шаблон класса complex
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using std::cout; using std::cin; using std::endl;...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.