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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Misha_prog
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 184
#1

Правильное подключение заголовочных файлов - C++

15.04.2014, 20:08. Просмотров 1605. Ответов 4
Метки нет (Все метки)

Всем привет!!!Начал разбираться с ООП , и ... тут же возникла проблема. Пишу программу следующую
есть два класса футболист и команда и соответсвующие поля в них , но беда не в этом т к футболист имеет в поле ссылку на команду а команда содержит массив указателей на футболистов , и проблема возникает в том что , появляются ошибки типа undeclared identifier , хотя все заголовочные файлы подключаю, вот пример
класс команда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "Player.h"
class Team 
{
public:
    Team (void);
    Team (std::string name);
    ~Team (void);
    std::string GetName()const;
    void        SetName(std::string name);
    bool        AddPlayer(Player const &player){return true;};
    bool        RemovePlayer(Player const& player){return false;};
private:
    std::string m_name;
        std::set<std::shared_ptr< Player > > m_players ;
};
класс игрок
C++
1
2
3
4
5
6
7
8
9
10
#include "Team.h"
class Player :
{
 
public:
    Player ( std::shared_ptr<Team const> const & team);
    ~Player (void);
    std::shared_ptr<Team const>  GetTeam()const;
private:
    std::weak_ptr<Team const> m_team;
может кто встречался с такой проблемой, подскажите пожалуйста!
Всем спасибо за внимание
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 20:08     Правильное подключение заголовочных файлов
Посмотрите здесь:

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

Правильное включение заголовочных файлов - C++
Привет, хочу задать такой вопрос. У меня есть классы в файлах Menu.h, Options.h, About.h, Game.h, Pause.h. Каждый из этих классов должен...

Подключение сторонних заголовочных файлов - C++
есть 2 репозитория с моим проектом, и с файлами которые пишутся для нескольких проектов, можно ли подключить их не перенося в мой проект?...

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

Перекрёстное подключение заголовочных файлов - C++
Здоровеньки булы. Есть 2 класса, каждый в своём хедере. В классе А есть экземпляр (не указатель) класса В и наоборот. Как организовать...

Подключение к main.cpp заголовочных файлов с классами - C++
Есть следующий код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; #include &quot;student.h&quot; using...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
15.04.2014, 20:22     Правильное подключение заголовочных файлов #2
Forward declaration в помощь
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
15.04.2014, 20:22     Правильное подключение заголовочных файлов #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Misha_prog, У тебя циклическое включение заголовочных файлов. Если есть include guards (#ifndef N #define N #endif или #pragma ones) то она не даст подключить один и тот же файл в одной единице трансляции. Если же их нет, то будет другая ошибка "множественное определение".
В общем нужно разорвать циклическое включение. Делается это с помощью предварительного объявления.

Team.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Player;
 
class Team 
{
public:
    Team (void);
    Team (std::string name);
    ~Team (void);
    std::string GetName()const;
    void        SetName(std::string name);
    bool        AddPlayer(Player const &player){return true;};
    bool        RemovePlayer(Player const& player){return false;};
private:
    std::string m_name;
    std::set< std::shared_ptr< Player > > m_players ;
};
Player.h - подключается в Team.cpp

Player.h
C++
1
2
3
4
5
6
7
8
9
10
class Team;
 
class Player 
{
public:
    Player ( std::shared_ptr<Team const> const & team);
    ~Player (void);
    std::shared_ptr<Team const>  GetTeam()const;
private:
    std::weak_ptr<Team const> m_team;
Team.h подключается в Team.cpp.
Misha_prog
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 184
15.04.2014, 20:25  [ТС]     Правильное подключение заголовочных файлов #4
Всем Спасибо!!! Получилось!!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2014, 20:27     Правильное подключение заголовочных файлов
Еще ссылки по теме:

Иерархия заголовочных файлов - C++
Вопрос такой. Есть 2 заголовочных файла с классами: core.h interface.h В core.h происходит #include interface.h В...

Отличие заголовочных файлов - C++
чем отличается string.h cstring string

Назначение заголовочных файлов - C++
Я читала учебник и википедию - никак не доходит. В общем, может я неправильно поняла: есть у меня &quot;Моя программа.cpp&quot;, и есть...

Объявление заголовочных файлов - C++
Скажите в чем разница между объявлением вида: #include &lt;iostream&gt; и вида #include &quot;iostream&quot;

Некорректное взаимодействие заголовочных файлов - C++
Имеется три класса (для каждого отдельный .h). Также есть два enum types, хранящихся в .h с классом. Компилятор во всех заголовочных...

Создание и использование заголовочных файлов - C++
Здравствуйте! Хочу создать заголовочный файл и засунуть туда объявления функций. Так он выглядит #ifndef LONGNUM_H_INCLUDED #define...


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

Или воспользуйтесь поиском по форуму:
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
15.04.2014, 20:27     Правильное подключение заголовочных файлов #5
Только надо помнить, что тип определенный через предварительное объявление - неполный. Его можно использовать при определении ссылок и указателей. Но объект создать нельзя, также нельзя использовать методы и данные класса. Для создания объекта нужно будет полное определение типа. В месте использования и создания команд и игроков должны быть включены заголовочные файлы с соответствующими полными определениями этих типов.
Yandex
Объявления
15.04.2014, 20:27     Правильное подключение заголовочных файлов
Ответ Создать тему
Опции темы

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