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

Cross referencing - проблема с include'ами - C++

Восстановить пароль Регистрация
 
Illko
1 / 1 / 0
Регистрация: 25.05.2015
Сообщений: 31
03.10.2016, 12:12     Cross referencing - проблема с include'ами #1
Допустим есть класс one и есть класс two. Оба эти класса нуждаются друг в друге, но если подключить в первый класс второй, а во второй класс первый, то будет ошибка. Так как правильно подключать эти файлы друг к другу?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2016, 12:12     Cross referencing - проблема с include'ами
Посмотрите здесь:

C++ INCLUDE
C++ #include в C++
C++ #include "StdAfx.h" и проблема цикал в компиляторе
Проблема с #include C++
C++ Работа с class-ами(вывести на дисплей)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
03.10.2016, 12:15     Cross referencing - проблема с include'ами #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Надо отделить описание класса от его определения (в определение обычно текст модулей методов) и подключать описание. Можно указать так:
C++
1
class Name;
И это уже позволит использовать имя класса как тип.
Illko
1 / 1 / 0
Регистрация: 25.05.2015
Сообщений: 31
03.10.2016, 17:14  [ТС]     Cross referencing - проблема с include'ами #3
Сделал все так, как вы говорили, но проблема всё-равно та сама.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "Creature.h"
class GameMap; //Вот подключаю
 
void Creature::MoveTo(Direction dir, GameMap Map) { //Вот тут пишет "Ошибка: недопустимый неполный тип"
    if (isMoving == true)                                      //когда навожу на "GameMap"
        return;
 
    int x = _x / 32,
        y = _y / 32;
 
    Map.SetLay1Element(x, y, Textures::Void);
    switch (dir) {
    case Direction::Down: {
        if (Map.GetLay1Element(x, y + 1) > 5) {
            isMoving = true;
            direction = dir;
        }
    }break;
    case Direction::Up: {
        if (Map.GetLay1Element(x, y - 1) > 5) {
            isMoving = true;
            direction = dir;
        }
    }break;
    case Direction::Left: {
        if (Map.GetLay1Element(x - 1, y) > 5) {
            isMoving = true;
            direction = dir;
        }
    }break;
    case Direction::Right: {
        if (Map.GetLay1Element(x + 1, y) > 5) {
            isMoving = true;
            direction = dir;
        }
    }break;
    default: break;
    }
 
}
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
03.10.2016, 17:27     Cross referencing - проблема с include'ами #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Illko, так хорошо, есть заголовок, есть
C++
1
class GameMap; //Вот подключаю
Теперь нужно заменить это на
C++
1
#include "GameMap.h"
чтоб компилятор уже мог не просто принять типы в прототипе методов, но и переварить вот такие вызовы
C++
1
Map.SetLay1Element(x, y, Textures::Void);
Если хочешь, то кидай остальные файлы.
nd2
1019 / 758 / 255
Регистрация: 29.01.2016
Сообщений: 2,369
03.10.2016, 23:58     Cross referencing - проблема с include'ами #5
Illko, защита от повторных включений в .h файлах есть?
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2784 / 1430 / 393
Регистрация: 18.10.2014
Сообщений: 2,626
04.10.2016, 03:40     Cross referencing - проблема с include'ами #6
Цитата Сообщение от Illko Посмотреть сообщение
Допустим есть класс one и есть класс two. Оба эти класса нуждаются друг в друге, но если подключить в первый класс второй, а во второй класс первый, то будет ошибка. Так как правильно подключать эти файлы друг к другу?
1. Сначала разобраться, зачем эти файлы нужно включать друг в друга.
2. Потом, в зависмости от результатов 1, волевым решением отказаться от одного из включений. Заменить его предварительными объявлениями элементов невключенного заголовочного файла.

Без конкрентного описания ситуации говорить более конкретно трудно.
Yandex
Объявления
04.10.2016, 03:40     Cross referencing - проблема с include'ами
Ответ Создать тему
Опции темы

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