Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
1

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

15.04.2014, 20:08. Показов 2809. Ответов 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;
может кто встречался с такой проблемой, подскажите пожалуйста!
Всем спасибо за внимание
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2014, 20:08
Ответы с готовыми решениями:

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

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

Подключение заголовочных файлов
Итересует меня вопрос : нужно ли при компиляции программ оставлять только нужные хэдеры ? т.е. их...

Подключение заголовочных файлов
Начал изучать С++, скачал несколько книг и заметил что в одних при включении заголовочных файлов...

4
Don't worry, be happy
17172 / 10055 / 1935
Регистрация: 27.09.2012
Сообщений: 25,053
Записей в блоге: 1
15.04.2014, 20:22 2
Forward declaration в помощь
1
15124 / 8122 / 1961
Регистрация: 30.01.2014
Сообщений: 13,808
15.04.2014, 20:22 3
Лучший ответ Сообщение было отмечено Misha_prog как решение

Решение

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.
1
0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
15.04.2014, 20:25  [ТС] 4
Всем Спасибо!!! Получилось!!!!
0
15124 / 8122 / 1961
Регистрация: 30.01.2014
Сообщений: 13,808
15.04.2014, 20:27 5
Только надо помнить, что тип определенный через предварительное объявление - неполный. Его можно использовать при определении ссылок и указателей. Но объект создать нельзя, также нельзя использовать методы и данные класса. Для создания объекта нужно будет полное определение типа. В месте использования и создания команд и игроков должны быть включены заголовочные файлы с соответствующими полными определениями этих типов.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2014, 20:27

Подключение заголовочных файлов.
У меня есть заголовочный файл: ...\1\2\file.h. в папке &quot;1&quot; есть file2.h. Как подключить к &quot;file.h&quot;...

Подключение заголовочных файлов
Здравствуйте! Подскажите, можно ли сделать так, чтобы при создании нового консольного проекта,...

Подключение заголовочных файлов
Имею два файла Large Factorial.h #include &lt;sstream&gt; #include &lt;iostream&gt; #include &lt;iomanip&gt;...

Подключение заголовочных файлов
Здравствуйте. Возникают ошибки при компиляции проекта: 1. Указывает на указатель: 2. Указывает...


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

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

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