我正在制作这个游戏,我正在让每个州都成为一个单身人士。我在使用SandboxState的GetInstance函数时遇到了很多错误。
以下是错误:
错误1错误C2143:语法错误:缺少&#39 ;;'之前' *' c:\ users \ username \ desktop \ peggleclone \ maze \ maze \ sandboxstate.cpp 5
错误2错误C2248:' SandboxState :: SandboxState' :无法访问在类' SandboxState'中声明的私有成员c:\ users \ username \ desktop \ peggleclone \ maze \ maze \ sandboxstate.cpp 5
错误3错误C2248:' SandboxState :: ~SandboxState' :无法访问在类' SandboxState'中声明的私有成员c:\ users \ username \ desktop \ peggleclone \ maze \ maze \ sandboxstate.cpp 5
错误4错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ users \ username \ desktop \ peggleclone \ maze \ maze \ sandboxstate.cpp 6
错误5错误C2556:' int * SandboxState :: GetInstance(void)' :重载函数的区别仅在于来自' SandboxState * SandboxState :: GetInstance(void)'的返回类型。 c:\ users \ username \ desktop \ peggleclone \ maze \ maze \ sandboxstate.cpp 6
错误6错误C2371:' SandboxState :: GetInstance' :重新定义;不同的基本类型c:\ users \ username \ desktop \ peggleclone \ maze \ maze \ sandboxstate.cpp 6
程序似乎无法识别GetInstance的返回值 作为SandboxState *。它一直将它标记为int。我不确定为什么它会尝试在错误2和3中调用构造函数/析构函数。
这是SandboxState.cpp,SandboxState.h和BaseGameState.h
SandboxState.cpp
#include "stdafx.h"
#include "SandboxState.h"
SandboxState* SandboxState::GetInstance(void)
{
static SandboxState s_Instance;
return &s_Instance;
}
void SandboxState::Enter()
{
}
void SandboxState::Exit()
{
}
bool SandboxState::Update(float elapsedTime)
{
}
void SandboxState::Render(sf::RenderWindow* window)
{
}
SandboxState.h
#pragma once
#include "BaseGameState.h"
class SandboxState :
public BaseGameState
{
public:
/**********************************************************/
// Singleton Accessor
static SandboxState* GetInstance( void );
/**********************************************************/
// IGameState Interface:
virtual void Enter(void) override; // load resources
virtual void Exit(void) override; // unload resources
virtual bool Update(float elapsedTime) override; // handle input & update entites
virtual void Render(sf::RenderWindow* window) override; // render entities / menu
private:
/**********************************************************/
// SINGLETON!
SandboxState(void) = default;
virtual ~SandboxState(void) = default;
SandboxState(const SandboxState&) = delete;
SandboxState& operator= (const SandboxState&) = delete;
}
BaseGameState.h
#pragma once
class BaseGameState
{
protected:
/**********************************************************/
// Virtual Destructor
BaseGameState(void) = default;
~BaseGameState(void) = default;
public:
/**********************************************************/
// IGameState Interface:
virtual void Enter( void ) = 0; // load resources
virtual void Exit ( void ) = 0; // unload resources
virtual bool Update( float elapsedTime ) = 0; // handle input & update entites
virtual void Render( sf::RenderWindow* window ) = 0; // render entities / menu
};
答案 0 :(得分:7)
您在SandboxState
班级声明结尾处遗漏了分号。这应该是你看到错误的原因。
作为旁注,在BaseGameState
课程中,有一条评论说// Virtual Destructor
;但是,它紧挨着构造函数,构造函数和析构函数都没有标记为virtual
。