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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
#1

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

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

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

Как правильно сделать шаблон класса complex - C++
#include "stdafx.h" #include <iostream> using std::cout; using std::cin; using std::endl; namespace Algebra ...

Определение метода вне класса, как inline в многофайловом проекте - C++
Здравствуйте! Помогите разобраться!) В общем имеется: ...

Как сделать, чтобы функция класса могла работать с обьектами другого класса - C++
есть класс к примеру class One и класс к примеру class Two нужно чтобы элемент функция класса One могла работать в обьектами класа...

Как сделать членом класса экземпляр этого же класса - C++
class Operation { public: bool type; //true = operation, false = number char Operator; Operation L_Op; Operation R_Op; ...

Как в проекте Wisard'а сделать второй вид для документа? - C++
Подскажите, пожалуйста, как в проекте, созданном с помощью Wisard'а сделать второй вид для документа. Дело в том, что класс вида создан,...

Как сделать, чтобы два проекта с разной кодировкой работали в одном объединённом проекте? - C++
Добрый день подскажите есть два проекта в одном стоит многобайтовая кодировка в другом юникод, по отдельности все нормально компилируется...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
12.09.2011, 13:44     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #2
В каждом модуле следует сделать #include <UnitX.h>
После объявить в хэдер-файле какого-либо модуля классовую переменную, н-р, NameClass *NameVar;
Потом в нужном месте программы объявляется: NameVar = new NameClass(); В скобках необходимо указать параметры, которые передаются конструктору класса, если они нужны.
Через эту переменную, через -> обращаться к нужным полям и методам класса. Например:
NameVar->NameOfMethod(); в скобках также необходимые для вызова метода параметры
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
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
12.09.2011, 14:11     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #4
Цитата Сообщение от Razzeeyy Посмотреть сообщение
после чего мне нужно использовать функцию член(testing.draw()) в main.cpp, но вот тут то я и получаю сообщение что класс не был определен.
Покажите сообщение об ошибке.
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
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
12.09.2011, 14:38     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #6
Если правильно понял, то проблема не в том, что класс не виден, а в том, что внутри функции Display() не виден объект testing. А где он создаётся?
Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 14:52  [ТС]     Как правильно сделать декларацию класса видимой во всём проекте и всех его модулях? #7
>>а сам класс для использования деклалируется в controls.cpp

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

extern testing;

или

extern Button testing; ?
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
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++
Добрый день! Написал прогу бинарного дерева поиска, все работает, но нужен совет как убрать за собой, тобесь очистить память во избежания...

Как правильно вызывать конструктор шаблонного класса? - C++
Как правильно вызывать конструктор класса? template &lt;class T&gt; class A{ T *v; int dim; public: A(T *a,int n); }; ...

Как правильно инициализировать статические члены класса? - C++
Я новичок и заранее прошу прощение за тупые вопросы. Имеются два класса: Solution и Pool. Pool состоит из нескольких обьектов класса...

Как правильно записать наследника от такого класса? - C++
template &lt;class T&gt; class Me{ ...} От класса Me?

Как правильно инициализировать динамический массив пользовательского класса - C++
Допустим есть класс: class A { public: A(); A(int a, int b, int c) {} }; и нам нужно инициализировать динамический...


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

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

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