Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

10
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(); в скобках также необходимые для вызова метода параметры
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
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
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
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
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
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
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
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
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
Привет! Вот еще темы с ответами:

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

Как сделать видимой полосу загрузки? - Visual Basic
Я новичок в VB и пытаюсь сделать, чтоб при загрузки какой нибудь простой программы у меня вылазила полоса загрузки, но от того что проц у...

Как сделать видимой библиотеку libopencv_calib3d.so.2.4? - Linux
Форумчане здравствуйте! не могу понять почему библиотека не добавляется в PATH error while loading shared libraries:...

Как сделать текстуру видимой всегда - DirectX
У меня есть от текстуры NumVertices и PrimCount, как их подвинуть на передний план,ну что бы было видно сквозь другие текстуры ?


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

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

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