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

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

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

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

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

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

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

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

Можно ли сразу во всём проекте изменить connectionstring?
у меня в проекте много форм и в каждой есть sqlconnection.Могу я сразу во всём...

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

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

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

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

extern testing;

или

extern Button testing; ?
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
12.09.2011, 15:08 #10
C++
1
extern Button testing;
1
Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
12.09.2011, 15:25  [ТС] #11
Всё, помогло, спасибо
0
12.09.2011, 15:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 15:25
Привет! Вот еще темы с решениями:

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

Как построить модуль класса, чтобы его экземпляры отображались правильно в ListBox'e?
Прошу помощи. Элементом списка является пара строк. Отображение элемента...

Как сделать текстуру видимой всегда
У меня есть от текстуры NumVertices и PrimCount, как их подвинуть на передний...

Как сделать видимой главную форму?
Здравствуйте. В моем приложении главная форма при старте скрыта таким...


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

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

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