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

C++

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

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

18.11.2009, 21:34. Просмотров 549. Ответов 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'
Я думаю что проблема в том что они друг друга инклюдят. Если кто знает буду рад помощи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2009, 21:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не комилится когда h-файлы инклюдят друг друга (C++):

Visual C++ и Builder C++ сильно отличаются друг от друга? - C++
Доброго времени суток. У меня такой вопрос, Visual C++ и Builder C++ сильно отличаются друг от друга? Например если прога была написана в...

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

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

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

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

Центрирование компонентов относительно друг друга - C++ Builder
Ребят, чет я туплю.. Начну с простых вещей - есть GroupBox, его надо оцентриваровать по горизонтали относительно формы, на которой он...

7
ISergey
Maniac
Эксперт С++
1376 / 887 / 53
Регистрация: 02.01.2009
Сообщений: 2,663
Записей в блоге: 1
18.11.2009, 21:49 #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);
};
1
victor_g
60 / 60 / 2
Регистрация: 09.11.2009
Сообщений: 198
18.11.2009, 21:51 #3
используйте стандартные средства, чтобы исключить рекурсивность команд #include.
У Вас:
A: #include "B"
B: #include "A" - "цикл" обращений.
Надо использовать директивы #define, #ifdef, #ifndef
1
BigMax
3 / 2 / 1
Регистрация: 18.09.2009
Сообщений: 10
18.11.2009, 22:21  [ТС] #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
Сделал так как вы посоветовали. Эрроры остались. Может надо что-то еще?
0
ISergey
Maniac
Эксперт С++
1376 / 887 / 53
Регистрация: 02.01.2009
Сообщений: 2,663
Записей в блоге: 1
18.11.2009, 22:27 #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
Для продолжения нажмите любую клавишу . . .
1
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
18.11.2009, 22:31 #6
Цитата Сообщение от victor_g Посмотреть сообщение
используйте стандартные средства, чтобы исключить рекурсивность команд #include.
У Вас:
A: #include "B"
B: #include "A" - "цикл" обращений.
Надо использовать директивы #define, #ifdef, #ifndef
#pragma once же
0
BigMax
3 / 2 / 1
Регистрация: 18.09.2009
Сообщений: 10
18.11.2009, 23:04  [ТС] #7
ISergey, Большое спасибо. Сделал с опережающим объявлением классов и стало работать. Обязательно надо реализацию обоих классов в один cpp-файл сбросить. В общем спасибо.

Добавлено через 31 секунду
Всем спасибо. Разобрался.
0
victor_g
60 / 60 / 2
Регистрация: 09.11.2009
Сообщений: 198
19.11.2009, 21:54 #8
Цитата Сообщение от alex_x_x Посмотреть сообщение
#pragma once же
-упс, извините!
0
19.11.2009, 21:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2009, 21:54
Привет! Вот еще темы с ответами:

Как определить различаются ли изображения друг от друга? - C++ Builder
Здравствуйте уважаемые программисты! Возникла такая задача, допустим есть два (Image1 и Image2) одинакового размера, нужно определить их...

Создать анимацию: два шарика на нитях, стукаются друг о друга - C++ Builder
Ребят помогите решить задачу! два шарика на нитях, стукаются друг о друга! создать анимацию!

Как заставить фигуры двигаться и отталкиваться друг от друга и от стенок формы - C++ Builder
Ребят, подскажите плиз, как заставить эти фигуры двигаться и отталкиваться друг от друга и от стенок формы. Помогите пожайлуйста. Высылаю...

Как сделать так, чтобы разные файлы могли видеть друг друга? - C++/CLI WinForms
Есть 2 формы. Одна вызывает другую. Есть класс, который подключается к 1-ой форме. Но когда я подключаю его ко 2-ой, она его не видит. ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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