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

C++

Войти
Регистрация
Восстановить пароль
 
BigMax
3 / 2 / 1
Регистрация: 18.09.2009
Сообщений: 10
#1

Не комилится когда h-файлы инклюдят друг друга - C++

18.11.2009, 21:34. Просмотров 529. Ответов 7
Метки нет (Все метки)

Есть два класса. Метод одного класса принимает указатель на другой класс.
A.h
C++
1
2
3
4
5
6
7
8
#pragma once
#include "B.h"
 
class A
{
public:
    void func(B *param);
};

B.h
C++
1
2
3
4
5
6
7
#pragma once
#include "A.h"
class B
{
public:
    void func(A *param);
};
У меня не компилится. Пишет error C2061: syntax error : identifier 'A'
Я думаю что проблема в том что они друг друга инклюдят. Если кто знает буду рад помощи.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2009, 21:34     Не комилится когда h-файлы инклюдят друг друга
Посмотрите здесь:

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

Наложение компанентов друг на друга - C++ Builder
есть форма, Image-заставка, пару Label, и ещё пару Image. надо чтоб Image-заставка была на заднем плане(бэкграунд), а остальные...

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

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

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

Наложение изображения друг на друга - C++ Builder
Допустим есть Image1. Хочу реализовать следующее: - загружаю еще картинку которую я могу передвигать над Image1, и потом после того как...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
18.11.2009, 21:49     Не комилится когда h-файлы инклюдят друг друга #2
A.h
C++
1
2
3
4
5
6
7
#pragma once
class B;
class A
{
public:
        void func(B *param);
};
B.h
C++
1
2
3
4
5
6
7
8
#pragma once
 
class A;
class B
{
public:
        void func(A *param);
};
victor_g
60 / 60 / 2
Регистрация: 09.11.2009
Сообщений: 198
18.11.2009, 21:51     Не комилится когда h-файлы инклюдят друг друга #3
используйте стандартные средства, чтобы исключить рекурсивность команд #include.
У Вас:
A: #include "B"
B: #include "A" - "цикл" обращений.
Надо использовать директивы #define, #ifdef, #ifndef
BigMax
3 / 2 / 1
Регистрация: 18.09.2009
Сообщений: 10
18.11.2009, 22:21  [ТС]     Не комилится когда h-файлы инклюдят друг друга #4
Цитата Сообщение от victor_g Посмотреть сообщение
используйте стандартные средства, чтобы исключить рекурсивность команд #include.
У Вас:
A: #include "B"
B: #include "A" - "цикл" обращений.
Надо использовать директивы #define, #ifdef, #ifndef
A.h
C++
1
2
3
4
5
6
7
8
9
10
#ifndef A_h
#define A_h
 
#include "B.h"
class A
{
public:
        void func(B *param);
};
#endif // A_h
B.h
C++
1
2
3
4
5
6
7
8
9
10
#ifndef B_h
#define B_h
 
#include "A.h"
class B
{
public:
        void func(A *param);
};
#endif // B_h
Сделал так как вы посоветовали. Эрроры остались. Может надо что-то еще?
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
18.11.2009, 22:27     Не комилится когда h-файлы инклюдят друг друга #5
header_a.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef _header_a_h
#define _header_a_h
 
class b;
 
class a{
public:
    a();
    void foo(const b*);
 
    char res;
};
 
#endif
header_b.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef _header_b_h
#define _header_b_h
 
class a;
 
class b{
public:
    b();
    void foo(const a*);
 
    char res;
};
#endif
source_ab.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "header_a.h"
#include "header_b.h"
 
#include <iostream>
 
void a::foo(const b* i){
    std::cout << i->res << std::endl;
}
 
void b::foo(const a* i){
    std::cout << i->res << std::endl;
}
 
a::a(): res('a'){ }
b::b(): res('b'){ }
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
#include "header_a.h"
#include "header_b.h"
 
int main()
{
    a i;
    b j;
 
    i.foo(&j);
    j.foo(&i);
 
    return 0;
}
Результат
b
a
Для продолжения нажмите любую клавишу . . .
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
18.11.2009, 22:31     Не комилится когда h-файлы инклюдят друг друга #6
Цитата Сообщение от victor_g Посмотреть сообщение
используйте стандартные средства, чтобы исключить рекурсивность команд #include.
У Вас:
A: #include "B"
B: #include "A" - "цикл" обращений.
Надо использовать директивы #define, #ifdef, #ifndef
#pragma once же
BigMax
3 / 2 / 1
Регистрация: 18.09.2009
Сообщений: 10
18.11.2009, 23:04  [ТС]     Не комилится когда h-файлы инклюдят друг друга #7
ISergey, Большое спасибо. Сделал с опережающим объявлением классов и стало работать. Обязательно надо реализацию обоих классов в один cpp-файл сбросить. В общем спасибо.

Добавлено через 31 секунду
Всем спасибо. Разобрался.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2009, 21:54     Не комилится когда h-файлы инклюдят друг друга
Еще ссылки по теме:

Наложение Image друг на друга - C++ Builder
немогу осуществить! использую формат пнг f хранилище для изображения на Image2 надо чтобы на f был синий цвет прозрачный ...

Шарики отбиваются от стенок и друг от друга ... - C++ Builder
реализовал шарик который отбивается от стенок. вот то что у меня получилось: #include &lt;vcl.h&gt; #pragma hdrstop #include...

Два класса, вызывающие друг друга - C++
У меня есть файл class1.h и файл class2.h внутри класса 1 вызывается класс 2 и наоборот. Но, класс 1 располагается выше и не видит...

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


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

Или воспользуйтесь поиском по форуму:
victor_g
60 / 60 / 2
Регистрация: 09.11.2009
Сообщений: 198
19.11.2009, 21:54     Не комилится когда h-файлы инклюдят друг друга #8
Цитата Сообщение от alex_x_x Посмотреть сообщение
#pragma once же
-упс, извините!
Yandex
Объявления
19.11.2009, 21:54     Не комилится когда h-файлы инклюдят друг друга
Ответ Создать тему
Опции темы

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