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

Два класса, вызывающие друг друга - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 19:53     Два класса, вызывающие друг друга #1
У меня есть файл class1.h и файл class2.h

внутри класса 1 вызывается класс 2 и наоборот. Но, класс 1 располагается выше и не видит класс 2, как это исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
31.05.2012, 19:57     Два класса, вызывающие друг друга #2
Ну наверно как то так:

C++
1
2
3
4
5
class class1;
 
class class2 {
   //описание класса
};
C++
1
2
3
4
5
class class2;
 
class class1 {
   //описание класса
};
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 20:00  [ТС]     Два класса, вызывающие друг друга #3
Toshkarik, не работает:

C++
1
2
invalid use of undefined type `struct ActionCompanyMenu'
forward declaration of `struct ActionCompanyMenu'
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
31.05.2012, 20:02     Два класса, вызывающие друг друга #4
Покажите, пожалуйста, код, чтоб понять что Вы хотите сделать.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 20:11  [ТС]     Два класса, вызывающие друг друга #5
Есть родитель А. От него 2 потомка Б и C. В "Б" вызывается "С" и наоборот. Но, так как "Б" располагается выше, чем "С", то он его просто не видит.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.05.2012, 20:16     Два класса, вызывающие друг друга #6
Цитата Сообщение от Ksan Посмотреть сообщение
Есть родитель А. От него 2 потомка Б и C
C++
1
2
3
class A {};
class B : A {};
class C : A {};
так? если так то Б и С на одном уровне и чтоб это
Цитата Сообщение от Ksan Посмотреть сообщение
В "Б" вызывается "С" и наоборот.
осущесвить нужно в обоих потомках хранить указатели друг на друга
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 20:20  [ТС]     Два класса, вызывающие друг друга #7
Jupiter, я же сказал, все это лежит в разных файлах *.h

A = new B; // вызывается в С
A = new C; // вызывается в В

не прокатывает, т.к. класс С лежит ниже чем класс В. Как это исправить?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.05.2012, 20:22     Два класса, вызывающие друг друга #8
Ksan, покажите или компилируемый пример или код с ошибкой
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 20:28  [ТС]     Два класса, вызывающие друг друга #9
http://zalil.ru/33355691

Вот архив, в котором лежит непонятка

класс А
C++
1
2
3
4
class A
{
        virtual void func(){  }
}*GPointer;
класс Б
C++
1
2
3
4
class B : public A
{
        void func() { GPointer = new C; }
};
класс С
C++
1
2
3
4
class C : public A
{
        void func(){}
};
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <iostream>
using namespace std;
 
#include "A.h"
#include "B.h"
#include "C.h"
 
int main()
{
        GPointer = new B;
        B.func();
        while(1);
        return 0;
}
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.05.2012, 20:35     Два класса, вызывающие друг друга #10
если возникла необходимость использовать внешний указатель - решение задачи неправильно
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 20:45  [ТС]     Два класса, вызывающие друг друга #11
Jupiter, внешний указатель использовать очень удобно в этой задаче. Ты лучше скажи, как исправить по-нормальному?

Я-то уже нашел путь. Но он несколько "финт ушами", а я хочу нормальный, ровный
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 21:46     Два класса, вызывающие друг друга
Еще ссылки по теме:

C++ Выполнение двух функций независимо друг от друга
В 2х классах указатели друг на друга C++
Структуры с указателями друг на друга C++

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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
31.05.2012, 21:46     Два класса, вызывающие друг друга #12
С такой структурой проекта B.h должен выглядеть так:
C++
1
2
3
4
5
6
class C;
 
class B : public A
{
        void func() { GPointer = new C; }
};
Если не поможет, то вынести func после объявления класса C.
Yandex
Объявления
31.05.2012, 21:46     Два класса, вызывающие друг друга
Ответ Создать тему
Опции темы

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