Возможно, вы захотите взять хорошую книгу по C ++ , чтобы извлечь уроки, поскольку вещи, которые вы ошибаетесь, являются фундаментальными для языка.
Для объявлений классов требуетсяclass
Ключевое слово, предшествующее имени класса:
class TPlayer
{
private:
// ...
Это нужно вам, потому что компилятор должен знать, говорите ли вы о class
, struct
, union
или enum
и т. Д. В противном случае вы получите множество ошибок, подобных полученным.
Ваши функции-члены также должны начинаться с префикса TPlayer::
, как, например, с конструкторами и деструктором.Они необходимы для того, чтобы компилятор знал, что они являются частью класса TPlayer
.
TPlayer::TPlayer()
{
}
TPlayer::~TPlayer()
{
}
void TPlayer::SetName(char *_name)
{
}
char TPlayer::GetName(void)
{
}
Нет необходимости delete
членов класса, которые вы не выделяли самостоятельно.
~TPlayer::TPlayer()
{
// These are not needed. The variables name, hp, dmg, and wep
// were allocated when you created an instance of TPlayer. These
// will go away by themselves when the destructor is called.
//delete name;
//delete hp;
//delete dmg;
//delete wep;
// The exceptions to the above rule are things that are dynamically
// allocated. For example, you must delete[] everything that
// you new[]'ed, and you must fclose() all file handles you
// get from fopen(). If you consistently use the RAII idiom,
// then you won't have to worry about these "exceptions".
}
На самом деле современные программы на C ++ в настоящее время редко нуждаются в использовании delete
в коде приложения.Идиома «Получение ресурсов - инициализация» (RAII) позволяет вам не беспокоиться о delete
вещах в подавляющем большинстве случаев.Стандартные средства библиотеки, такие как std::vector
, используют идиому RAII для управления памятью массива.
Обратите внимание, что существуют правила, касающиеся использования идентификаторов, начинающихся с подчеркиваний .Возможно, вам необходимо знать о них.
Для примера, приведем примерный класс:
foo.h
#ifndef FOO_H
#define FOO_H
class Foo
{
public:
Foo();
~Foo();
void Set(int n);
int Get() const;
private:
int n;
};
#endif
foo.cpp
#include "foo.h"
Foo::Foo() : n(0)
{
}
Foo::~Foo()
{
}
void Foo::Set(int n)
{
this->n = n;
}
int Foo::Get() const
{
return n;
}