#pragma once
#include "Player.h"
class Player;
//class SmallHealth;
const int kNumOfCards = 3; //for Player class also
const int kCardLimit = 3;
class Cards
{
private:
protected:
int turnsInEffect;
Player *owner;
public:
Cards()
{turnsInEffect = 1;}
void AssignOwner(Player &player)
{
owner = &player;
}
virtual void PlayCard()
{}
virtual ~Cards(void)
{}
};
class SmallHealth : public Cards
{
public:
void PlayCard()
{
turnsInEffect = 1;
owner->SetHealth(owner->GetHealth() + 5);
//check if health goes over
if(owner->GetHealth() > owner->GetHealthLimit())
{
owner->SetHealth(owner->GetHealthLimit());
}
turnsInEffect--;
}
};
我想通過聲明類球員,我不會得到這些錯誤:混淆遠期聲明
error C2027: use of undefined type 'Player
看到的宣言「球員」
error C2227: left of '->SetHealth' must point to ...
檢查誤差2027年,似乎我必須在Card類之前明確地擁有整個班級,但我認爲前面的班級宣言會使其變得沒有必要。我如何設置它是根據Player類創建並分配一個子類,並存儲在Player類中。繼承Cards類的子類將調用Player類的函數。我正在經歷一段艱難的時間,確保兩個班級確定其他班級。
使用通常的命名約定,你不應該需要'class Player'的前向聲明(其接口大概是* Player.h中的* defined *,否)。 – dmckee