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

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

Восстановить пароль Регистрация
 
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 12:50     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #1
Здравствуйте. Имеется класс декларированный в одном модуле (файле), а нужно использовать его функции-члены в другом. Есть общий .h файл.
Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях?
Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2011, 12:50     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях?
Посмотрите здесь:

Как правильно инициализировать статические члены класса? C++
Как правильно вызывать конструктор шаблонного класса? C++
C++ Как правильно записать наследника от такого класса?
Как правильно сделать шаблон класса complex C++
C++ Как в проекте Wisard'а сделать второй вид для документа?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RaiaNKnight
 Аватар для RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 458
Записей в блоге: 1
12.09.2011, 13:44     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #2
В каждом модуле следует сделать #include <UnitX.h>
После объявить в хэдер-файле какого-либо модуля классовую переменную, н-р, NameClass *NameVar;
Потом в нужном месте программы объявляется: NameVar = new NameClass(); В скобках необходимо указать параметры, которые передаются конструктору класса, если они нужны.
Через эту переменную, через -> обращаться к нужным полям и методам класса. Например:
NameVar->NameOfMethod(); в скобках также необходимые для вызова метода параметры
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 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, но вот тут то я и получаю сообщение что класс не был определен.

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

неправильно выразился, создается в controls.cpp
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
12.09.2011, 14:56     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #8
Цитата Сообщение от Razzeeyy Посмотреть сообщение
>>а сам класс для использования деклалируется в controls.cpp
неправильно выразился, создается в controls.cpp
Так создаются объекты, а не классы. Он там в глобальной области видимости создан? Тогда, наверное, нужно добавить его объявление с ключевым словом extern (видимо в заголовочный файл или в те модули, где он используется)
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 14:58  [ТС]     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #9
это должно выглядеть как

extern testing;

или

extern Button testing; ?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
12.09.2011, 15:08     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #10
C++
1
extern Button testing;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 15:25     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях?
Еще ссылки по теме:

C++ Определение метода вне класса, как inline в многофайловом проекте
О том, почему нелюбим goto; как его правильно использовать; и чем в моем случае его можно заменить? C++
C++ Как сделать, чтобы два проекта с разной кодировкой работали в одном объединённом проекте?

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

Или воспользуйтесь поиском по форуму:
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 15:25  [ТС]     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #11
Всё, помогло, спасибо
Yandex
Объявления
12.09.2011, 15:25     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях?
Ответ Создать тему
Опции темы

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