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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Misha_prog
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 184
15.04.2014, 20:08     Правильное подключение заголовочных файлов #1
Всем привет!!!Начал разбираться с ООП , и ... тут же возникла проблема. Пишу программу следующую
есть два класса футболист и команда и соответсвующие поля в них , но беда не в этом т к футболист имеет в поле ссылку на команду а команда содержит массив указателей на футболистов , и проблема возникает в том что , появляются ошибки типа 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++
C++ Перекрестное подключение заголовочных файлов
Подключение заголовочных файлов. C++
Подключение заголовочных файлов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
15.04.2014, 20:22     Правильное подключение заголовочных файлов #2
Forward declaration в помощь
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
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
Всем Спасибо!!! Получилось!!!!
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
15.04.2014, 20:27     Правильное подключение заголовочных файлов #5
Только надо помнить, что тип определенный через предварительное объявление - неполный. Его можно использовать при определении ссылок и указателей. Но объект создать нельзя, также нельзя использовать методы и данные класса. Для создания объекта нужно будет полное определение типа. В месте использования и создания команд и игроков должны быть включены заголовочные файлы с соответствующими полными определениями этих типов.
Yandex
Объявления
15.04.2014, 20:27     Правильное подключение заголовочных файлов
Ответ Создать тему
Опции темы

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