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

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

Войти
Регистрация
Восстановить пароль
 
Illko
1 / 1 / 0
Регистрация: 25.05.2015
Сообщений: 32
#1

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

03.10.2016, 12:12. Просмотров 190. Ответов 5
Метки нет (Все метки)

Допустим есть класс one и есть класс two. Оба эти класса нуждаются друг в друге, но если подключить в первый класс второй, а во второй класс первый, то будет ошибка. Так как правильно подключать эти файлы друг к другу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2016, 12:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Cross referencing - проблема с include'ами (C++):

Cross referencing - проблема с include'ами - C++
Имеются 2 класса: #include "Base.h" #include "SiteAnalyzer.h" Бейз подключается в аналайрезе, а аналайзер в свою очередь...

Union, new placement, strict-aliasing, cross-platform - C++
Доброго времени суток. Ниже представленный код вроде бы работает. Гонял его на компиляторах cl/mingw ...

[filesystem, cross-platform] посоветуйте библиотеку для работы с файловыми путями - C++
Добрый день. нужно что-то цивилизованное, что отвечает требованиям: 1. (важно) что бы можно было собирать целевой продукт...

Не работают Referencing Outlets - Objective-C
Добрый день, уважаемые форумчане! Новичок в программировании на Objective-C. Прошу не пинать. Создал простую форму и хочу создать...

Cross таблица и EF - C#
Здравствуйте, схема табличек При попытке добавить в таблицу элемент CrossTasksTags cross = new CrossTasksTags() ...

Cross-platform - C#
Приветствую! Ребята подскажите, если способ писать приложение для windows, Linux, Mac на подобие Xamarin-а?

5
ture
443 / 336 / 127
Регистрация: 27.11.2014
Сообщений: 1,042
03.10.2016, 12:15 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Надо отделить описание класса от его определения (в определение обычно текст модулей методов) и подключать описание. Можно указать так:
C++
1
class Name;
И это уже позволит использовать имя класса как тип.
0
Illko
1 / 1 / 0
Регистрация: 25.05.2015
Сообщений: 32
03.10.2016, 17:14  [ТС] #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;
    }
 
}
0
ture
443 / 336 / 127
Регистрация: 27.11.2014
Сообщений: 1,042
03.10.2016, 17:27 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Illko, так хорошо, есть заголовок, есть
C++
1
class GameMap; //Вот подключаю
Теперь нужно заменить это на
C++
1
#include "GameMap.h"
чтоб компилятор уже мог не просто принять типы в прототипе методов, но и переварить вот такие вызовы
C++
1
Map.SetLay1Element(x, y, Textures::Void);
Если хочешь, то кидай остальные файлы.
0
nd2
2480 / 2069 / 723
Регистрация: 29.01.2016
Сообщений: 6,794
03.10.2016, 23:58 #5
Illko, защита от повторных включений в .h файлах есть?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4140 / 2271 / 561
Регистрация: 18.10.2014
Сообщений: 3,882
04.10.2016, 03:40 #6
Цитата Сообщение от Illko Посмотреть сообщение
Допустим есть класс one и есть класс two. Оба эти класса нуждаются друг в друге, но если подключить в первый класс второй, а во второй класс первый, то будет ошибка. Так как правильно подключать эти файлы друг к другу?
1. Сначала разобраться, зачем эти файлы нужно включать друг в друга.
2. Потом, в зависмости от результатов 1, волевым решением отказаться от одного из включений. Заменить его предварительными объявлениями элементов невключенного заголовочного файла.

Без конкрентного описания ситуации говорить более конкретно трудно.
0
04.10.2016, 03:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2016, 03:40
Привет! Вот еще темы с ответами:

Ругается на cross - Matlab
Делаю по заданию и такая ошибка выскочила.На cross(a,b) что нужно исправить? a=sym('')%сумму матриц размера 2х3 a = ...

Cross Browser, Any Protect - Удаление вирусов
Доброго времени суток друзья, я Илюха. Много тут читал, но понял, что для конкретного случая нужны логи. Вот собственно и вопрос: Каким то...

Cross domain cookie - Web
Привет. Я устанавливаю куки на домене А и хочу получать их на домене В. Как это реализовать без занесения обоих доменов в Trusted sites?

Cross news в браузере - Удаление вирусов
я видел темы но не понимаю как они могут мне помочь а вирус то открывает ссылки на казино всякие даже с озвучкой


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

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

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