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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

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

31.05.2012, 19:53. Просмотров 1686. Ответов 11
Метки нет (Все метки)

У меня есть файл class1.h и файл class2.h

внутри класса 1 вызывается класс 2 и наоборот. Но, класс 1 располагается выше и не видит класс 2, как это исправить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 19:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Два класса, вызывающие друг друга (C++):

Два класса, требующих друг друга - C++
Существует два класса, обзовём их MyClassA и MyClassB. Возникла такая вот ситуация: у класса MyClassA есть поле типа vector<MyClassB*>...

Как скомпилировать два класса, которые используют методы друг друга - C++
Доброго времени суток. имеется 3 файлика: asteroid.cpp starsystem.cpp main.cpp в main.cpp файлики инкудятся в следующем...

Задаются два двузначных числа. Определить, являются ли они зеркальным отображение друг друга - C++
Можете решить эту простую задачу. И объяснить как вы ее решили. Задача должна решаться так, я ввожу два числа и программа сравнивает их на...

Раздельная компиляция: как быть, если код не компилируется, так как два файла подключают друг друга? - C++
Доброго времени суток. У меня есть какой-нибудь x.h: #include "y.h" class A { vector<B*> v; } и y.h:

Подключение .h файлов друг в друга - C++
Здравствуйте. Появилась такая проблема: есть два .h файла, и они перекликаются содержимым: в одном наследуется класс из другого, а в...

В 2х классах указатели друг на друга - C++
Я хочу в main() создать экземпляр класса игрок. и экземпляр класса турнир. Затем вызвать функцию игрока чтоб тот зарегистрировался в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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 {
   //описание класса
};
0
Ksan
27 / 27 / 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'
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
31.05.2012, 20:02 #4
Покажите, пожалуйста, код, чтоб понять что Вы хотите сделать.
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 20:11  [ТС] #5
Есть родитель А. От него 2 потомка Б и C. В "Б" вызывается "С" и наоборот. Но, так как "Б" располагается выше, чем "С", то он его просто не видит.
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 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 Посмотреть сообщение
В "Б" вызывается "С" и наоборот.
осущесвить нужно в обоих потомках хранить указатели друг на друга
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 20:20  [ТС] #7
Jupiter, я же сказал, все это лежит в разных файлах *.h

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

не прокатывает, т.к. класс С лежит ниже чем класс В. Как это исправить?
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.05.2012, 20:22 #8
Ksan, покажите или компилируемый пример или код с ошибкой
0
Ksan
27 / 27 / 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;
}
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.05.2012, 20:35 #10
если возникла необходимость использовать внешний указатель - решение задачи неправильно
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
31.05.2012, 20:45  [ТС] #11
Jupiter, внешний указатель использовать очень удобно в этой задаче. Ты лучше скажи, как исправить по-нормальному?

Я-то уже нашел путь. Но он несколько "финт ушами", а я хочу нормальный, ровный
0
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 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.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 21:46
Привет! Вот еще темы с ответами:

Вложенные в друг друга классы - C++
Есть исходный код: class1.h #pragma once #include &quot;class2.h&quot; class class1 { private: class2* c2; public: ...

Структуры с указателями друг на друга - C++
Нужно написать программу для создания динамической конструкции из элементов структуры 2х типов (см. схему). Однако для этого нужно...

Определение классов ссылающихся друг на друга - C++
есть два таких класса(в классе tnode - есть поле node_list children, а node_list - это связанный список tnode) class tnode{ tnode*...

Удалить зависимость функций друг от друга - C++
есть 2 функции(ввод и вывод массива).почему если разлучить эти 2 функции то функция show без функции print перестаёт работать и выводит...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.05.2012, 21:46
Ответ Создать тему
Опции темы

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