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

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

Войти
Регистрация
Восстановить пароль
 
Голубь Вася
5 / 5 / 3
Регистрация: 02.08.2015
Сообщений: 62
#1

Вынос класса в отдельный файл - C++

02.08.2015, 14:05. Просмотров 1129. Ответов 5
Метки нет (Все метки)

Использую MS VS 2013 Ultimate
Учусь программировать, решил попробовать написать морской бой.
Решил создать класс игрока, в котором бы хранились поля, имена и т.д.
Спустя время класс немножко разросся, и решил я его вынести в отдельный файл, чего раньше никогда не делал и не знаю как толком это делать. Нагуглил, что в .h файле должны храниться прототипы функций, а в .cpp сами функции.
Итак, 3 вопроса:
1. А что делать с классами? Какой у класса "прототип"?
2. Какого хрена мои файлы не инклудятся?
3. Как по хорошему то разбивать код? А то в инете что то все замудренное, мне бы по проще языком рассказать

Проект создавал пустой, player.h лежит в "заголовочные файлы", main.cpp и player.cpp лежат в "файлы исходного кода", это если в обозревателе решений смотреть. Если открыть папку, то все 3 файла лежат в одной папке D:\CPP\Sea fight\Sea fight
P.S. содержание функций вроде не нужно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//main.cpp
#include <iostream>
#include <cstdlib> 
#include <player.h> //Ошибка    2   error C1083: Не удается открыть файл включение: player.h: No such file or directory d:\cpp\sea fight\sea fight\main.cpp 4
 
using namespace std;
 
Player setNames(int playerId) { //Получаем имена и пароли (если надо) игроков
//...
}
 
int main(int argc, char *argv[]) {
//...
}
C++
1
2
3
4
5
6
7
//player.h
#ifndef PLAYER_H
#define PLAYER_H
 
//Собственно, а что тут писать если я хочу вынести не функции, а класс?
 
#endif
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
//player.cpp
#include <iostream>
#include <cstdlib> 
#include <player.h> //Ошибка    1   error C1083: Не удается открыть файл включение: player.h: No such file or directory d:\cpp\sea fight\sea fight\player.cpp   3
 
class Player {
    char name[20];
    char pass[20];
    char field[10][10];
    char enemy_field[10][10];
public:
    Player(int i);
    void setName(char *_name);
    void setPass(char *_pass);
    void getEnemyField(Player enemy);
};
 
Player::Player(int i) {
//...
}
 
void Player::setName(char *_name) {
//...
}
 
void Player::setPass(char *_pass) {
//...
}
 
void Player::getEnemyField(Player enemy) {
//...
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2015, 14:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вынос класса в отдельный файл (C++):

Вынос глобальных переменных в отдельный файл - C++
Всем привет! Вопрос такой - сижу разбираюсь с вынесением функций в отдельные файлы. Что удалось выяснить - подключая через #include файл...

Вынос реализации метода шаблона класса в другой файл - C++
Здравствуйте! Допустим, есть класс: // class.hpp #ifndef CLASS_HPP_ #define CLASS_HPP_ class testClass{ public:

Вынос переменных в отдельный модуль - C++
Здравствуйте, у меня появился вопрос... Можно ли технически вынести переменные программы в отдельный модуль и сделать так, чтоб они были...

Почему выносят объявление класса в отдельный файл - C++
почему не правильно выносить классы Х файл, и рекомендуют в хереде объявления а в спп описание* чем плохо, если все будет в х файле?

Как вынести реализацию методов шаблонного класса в отдельный файл? - C++
Как вынести реализацию методов шаблонного класса в отдельный файл, описание шаблонного класса в .h а реализацию хотелось бы сделать в...

Зачем для указателя на объект класса создается отдельный класс - C++
Читаю книгу Джефа Элджера &quot;Библиотека программиста С++&quot;, там в главе про умные указатели приводится пример, где для указателя на класс...

5
Ferrari F1
621 / 518 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 14:08 #2
Голубь Вася, в .h файле должно содержаться определение класса с прототипами методов (элемент-функций).

Так же следует создать еще один .cpp файл для реализации (определения) методов (элемент-функций), по традиции оба этих файла должны иметь одинаковое имя (но расширения у них различны).

Таким образом, у тебя должно получиться 3 файла: main.cpp, class.h и class.cpp
Для включения нужно прописать в main.cpp
C++
1
#include "class.h"
0
zss
Модератор
Эксперт С++
6588 / 6150 / 2025
Регистрация: 18.12.2011
Сообщений: 16,037
Завершенные тесты: 1
02.08.2015, 14:13 #3
Цитата Сообщение от Голубь Вася Посмотреть сообщение
#include <player.h> //Ошибка 1 error C1083: Не удается открыть файл включение: player.h: No such file or directory d:\cpp\sea fight\sea fight\player.cpp 3
C++
1
#include "player.h"
0
Ferrari F1
621 / 518 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 14:19 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Иногда для сокрытия элементов-данных (полей класса) используются промежуточные классы, но о них, думаю, тут говорить не обязательно.

В твоем коде перед main() заголовочный файл обрамлен угловыми скобками <>
При таком написании заголовочный файл ищется в папке компилятора, где содержаться файлы стандартной библиотеки (а не в папке твоего проекта).
Для поска в папке твоего проекта нужно обрамлять двойными ковычками
1
Голубь Вася
5 / 5 / 3
Регистрация: 02.08.2015
Сообщений: 62
02.08.2015, 14:34  [ТС] #5
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Голубь Вася, в .h файле должно содержаться определение класса с прототипами методов (элемент-функций).

Так же следует создать еще один .cpp файл для реализации (определения) методов (элемент-функций), по традиции оба этих файла должны иметь одинаковое имя (но расширения у них различны).

Таким образом, у тебя должно получиться 3 файла: main.cpp, class.h и class.cpp
Для включения нужно прописать в main.cpp
C++
1
#include "class.h"
Для моего класса в class.h (player.h) тогда должно быть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef PLAYER_H
#define PLAYER_H
 
class Player {
    char name[20];
    char pass[20];
    char field[10][10];
    char enemy_field[10][10];
public:
    Player(int i);
    void setName(char *_name);
    void setPass(char *_pass);
    void getEnemyField(Player enemy);
};
 
#endif
А в class.cpp (player.cpp)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "player.h"
 
Player::Player(int i) {
//...
}
 
void Player::setName(char *_name) {
//...
}
 
void Player::setPass(char *_pass) {
//...
}
 
void Player::getEnemyField(Player enemy) {
//...
}
Так?
0
Ferrari F1
621 / 518 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 14:39 #6
Голубь Вася, ага
0
02.08.2015, 14:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2015, 14:39
Привет! Вот еще темы с ответами:

Создайте файл Студент. Занесите в отдельный файл записи из файла Студент, добавив сведения о новых студентах - C++
Создайте файл Студент. Занесите в отдельный файл записи из файла Студент, добавив сведения о новых студентах Вид файла студент: ...

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

Функции в отдельный файл - C++
Всем доброго времени суток! У меня есть основной файл в нем main и парочка больших функций. Я вынес эти две функции в отдельный файл...

Вынесение кода в отдельный файл. - C++
Чтобы понять ООП, пишу маленькую игрушку-пошаговый файтинг для курсовика. Пока консольный, linux. Логически состоит она из &quot;Меню&quot; и...


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

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

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