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

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

Восстановить пароль Регистрация
 
Голубь Вася
5 / 5 / 3
Регистрация: 02.08.2015
Сообщений: 62
02.08.2015, 14:05     Вынос класса в отдельный файл #1
Использую 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) {
//...
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 14:08     Вынос класса в отдельный файл #2
Голубь Вася, в .h файле должно содержаться определение класса с прототипами методов (элемент-функций).

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

Таким образом, у тебя должно получиться 3 файла: main.cpp, class.h и class.cpp
Для включения нужно прописать в main.cpp
C++
1
#include "class.h"
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 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"
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 14:19     Вынос класса в отдельный файл #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Иногда для сокрытия элементов-данных (полей класса) используются промежуточные классы, но о них, думаю, тут говорить не обязательно.

В твоем коде перед main() заголовочный файл обрамлен угловыми скобками <>
При таком написании заголовочный файл ищется в папке компилятора, где содержаться файлы стандартной библиотеки (а не в папке твоего проекта).
Для поска в папке твоего проекта нужно обрамлять двойными ковычками
Голубь Вася
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) {
//...
}
Так?
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 14:39     Вынос класса в отдельный файл #6
Голубь Вася, ага
Yandex
Объявления
02.08.2015, 14:39     Вынос класса в отдельный файл
Ответ Создать тему
Опции темы

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