缺少类型说明符,编译器将Class *更改为int *

时间:2015-03-24 20:47:42

标签: c++ class

我正在制作这个游戏,我正在让每个州都成为一个单身人士。我在使用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
};

1 个答案:

答案 0 :(得分:7)

您在SandboxState班级声明结尾处遗漏了分号。这应该是你看到错误的原因。

作为旁注,在BaseGameState课程中,有一条评论说// Virtual Destructor;但是,它紧挨着构造函数,构造函数和析构函数都没有标记为virtual