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

Область видимости - C++

Восстановить пароль Регистрация
 
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
27.06.2013, 14:36     Область видимости #1
У меня возникла проблема с областью видимости.

вот у меня два класса

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Obj
{
    public:
        Win *parent;
        void fun() 
        {
            parent->x+parent->y;      //Нужно видеть класс Win
             //...
        }
 
};
 
class Win
{
    public:
        int x,y;
        vector <Obj> vec;   //Нужно видеть класс Obj
};

И вот что происходит:
Мне нужно чтобы класс Win видел класс Obj и наоборот.
Я не могу никак додуматься как вообще можно сделать вхаимную видимость этих классов.
Ну или подскажите как по другому все сделать, чтобы опять не наткнуться на эту проблему
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2013, 14:36     Область видимости
Посмотрите здесь:

Область видимости в С++ C++
Область видимости C++
C++ Область видимости
Область видимости C++
C++ Область видимости Protected
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
27.06.2013, 14:44     Область видимости #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Obj;
 
class Win
{
    public:
        int x, y;
        vector <Obj> vec;
};
 
class Obj
{
    public:
        Win* parent;
        void fun()
        {
            //parent->x + parent->y;
            // ...
        }
 
};
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
27.06.2013, 15:03  [ТС]     Область видимости #3
anmartex,
А почему вы поменяли классы местами?? Это играет какое-то значение?
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
27.06.2013, 15:11     Область видимости #4
@Egor138, просто в классе Obj вы описываете реализацию метода fun в котором уже обращаетесь к полям объекта parent класса Win. Если бы они бы ли в предложенном вами порядке, то простое объявление класса Win не спасло ситуацию. Но если вы всё же хотите оставить очерёдность, то придётся реализацию метода fun вынести:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Win;
 
class Obj
{
    public:
        Win* parent;
        void fun();
};
 
class Win
{
    public:
        int x, y;
        vector <Obj> vec;
};
 
void Obj::fun()
{
    int a = parent->x + parent->y;
    // ...
}
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
27.06.2013, 15:17  [ТС]     Область видимости #5
Большое спасибо, теперь полностью разобрался
Yandex
Объявления
27.06.2013, 15:17     Область видимости
Ответ Создать тему
Опции темы

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