Давайте рассмотрим строку за строкой:
#ifndef PLAYER_H
#define PLAYER_H
#include "utility.h"
Пока все хорошо, вы можете проверить, поддерживает ли ваш компилятор #pragma once
, но макрос будет работать отлично.
class Player()
()
не допускаются в имени класса, снимите их
{
public:
//getPlayerID();
};
#endif
Остальная часть заголовочного файла в порядке.Давайте посмотрим на файл реализации:
#include "player.h"
Отлично.Помещение класса в заголовок - лучший способ убедиться, что в вашей программе используется только одно определение.
class Player()
Скобки недопустимы, но здесь у вас есть большая проблема.У вас уже есть класс с этим именем.Позвольте заголовку предоставить определение класса, файлу реализации просто нужно предоставить не встроенные функции-члены (и любой вспомогательный код).
{
string playerID;
int timeCycle;
}
Вот полная исправленная версия:
#if !defined(PLAYER_H)
#define PLAYER_H
#include <string>
#include "utility.h"
class Player
{
std::string player_id;
int time_cycle;
public:
// this is how you make a constructor, the parenthesis belong here, not on the class name
Player(std::string id, int time);
std::string getPlayerId() const;
};
#endif /* !defined(PLAYER_H) */
и файл реализации
#include "player.h"
// and this is how you write a non-inline constructor
Player::Player(std::string id, int time)
: player_id(id)
, time_cycle(time)
{}
std::string Player::getPlayerId() const
{
return player_id;
}
Все эти проблемы на самом деле являются базовыми для C ++, не имеют ничего общего с NachOS.