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

Проблма с #include - C++

Восстановить пароль Регистрация
 
[progeR]
6 / 7 / 0
Регистрация: 20.08.2011
Сообщений: 589
10.01.2013, 13:14     Проблма с #include #1
Добрый день.
Есть два класса, например A и B. Эти классы независимы друг от друга. В заголовочном файле класса А делаю:
C++ (Qt)
1
#include "B.h"
. Теперь я могу использовать все фичи класса B, например так:
C++ (Qt)
1
B *objOfClassB = new B(this);
Т.к. я в конструктор передаю указатель на класс А, то в объекте objOfClassB нужно этим как-то воспользоваться. Например:
C++ (Qt)
1
2
3
4
5
B::B(B *parent) : QWidget(parent)
{
    this->setGeometry(parent->p_x, parent->p_y, parent->width(), parent->height());
    p_pointerOnA = parent;
}
А для этого нужно сделать инклуд в классе B:
C++ (Qt)
1
#include "A.h"
Получается, как я понял, бесконечное вложение классов друг в друга. Ну и компилятор сообщает:
ошибка: invalid use of incomplete type 'B'
ошибка: forward declaration of 'struct B'
и т.д. Как с этим бороться? Записать объявление:
C++ (Qt)
1
class A;
толку не дает, не могу использовать функции класса А.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 13:14     Проблма с #include
Посмотрите здесь:

C++ INCLUDE
ошибка в лабе не находит #include<iomanip.h> #include<conio.h> C++
C++ #include в C++
Инклюиды - include C++
C++ проверка #include
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
10.01.2013, 18:15     Проблма с #include #2
Цитата Сообщение от [progeR
;3978723]бесконечное вложение классов друг в друга
Не классов, а только инклюдов
С бесконечным вложением инклюдов борются обычно так
a.h
C
1
2
3
4
 if !defined A_H
#define A_H
.....
#endif  // A_H
Добавлено через 7 минут
ИМХО, этой проблме место не здесь, в форуме "С++ для начинающих"
FlaYnoSt
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 18
10.01.2013, 18:28     Проблма с #include #3
Автор, почитай про стражи включения. Кстати, QtCreator же автоматически их добавляет, при создании заголовочных файлов.
[progeR]
6 / 7 / 0
Регистрация: 20.08.2011
Сообщений: 589
10.01.2013, 18:31  [ТС]     Проблма с #include #4
Цитата Сообщение от FlaYnoSt Посмотреть сообщение
Автор, почитай про стражи включения. Кстати, QtCreator же автоматически их добавляет, при создании заголовочных файлов.
А толку, все равно не работает.
Что сделать, чтобы 2 класса, вложенные друг в друга не выдавали ошибку?
canopen
411 / 410 / 12
Регистрация: 16.07.2012
Сообщений: 886
10.01.2013, 18:35     Проблма с #include #5
В A.h:
C++
1
2
3
4
5
6
class A
{
public:
    A();
    void MethodA();
};
В A.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
#include "A.h"
#include "B.h"
 
A::A()
{
    B* b = new B(this);
}
 
void A::MethodA()
{
}
В B.h:
C++
1
2
3
4
5
6
7
class A;
 
class B
{
public:
    B(A* a);
};
В B.cpp:
C++
1
2
3
4
5
6
7
#include "A.h"
#include "B.h"
 
B::B(A* a)
{
    a->MethodA();
}
Yandex
Объявления
10.01.2013, 18:35     Проблма с #include
Ответ Создать тему
Опции темы

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