错误C2061语法错误标识符 - 我不知道我做错了什么

时间:2015-08-02 06:10:33

标签: c++ class visual-studio-2013

所以我有一个我正在研究AGK库的游戏,我有两个与手头问题相关的类:oPlayerGlobalClassoPlayerFramework的孩子,GlobalClass只是一个全球范围的类,用于存储游戏中的所有内容。编译时发生错误,VS 2013没有抱怨它。 这是错误 The errors as in VS2013

首先,对不起所有的代码,我只是绝对不知道是什么导致这个。

所以有问题的文件是

oPlayer.h

#pragma once
//This is the player's class, actual code in oPlayer.cpp
#include "Constants.h"
#include "Framework.h"
#include "template.h"
#include "GlobalClass.h"

// Author: Paolo Mazzon
// Date Last Edited: 2015-08-01
// Name: oPlayer.h
// Purpose: To define the player class -- But not set the functions
// 
// Extra notes: None

class oPlayer : public Framework
{
public:
    Real hsp;
    Real vsp;
    Real speed;

    void playerInit(Real X, Real Y, GlobalClass globalObject)
    {
        //Set the standard variables to a default value
        x = X;
        y = Y;
        angle = 0;
        xScale = 1;
        yScale = 1;
        spriteIndex = agk::CreateSprite(unsigned int(globalObject.playerImage));
    }
};

和GlobalClass.h

#pragma once    
#include "template.h"
#include "Constants.h"
#include "Framework.h"
#include "oPlayer.h"
#include <list>

// Author: Paolo Mazzon
// Date Last Edited: 2015-08-01
// Name: GlobalClass.h
// Purpose: The class to hold variables that will be used everywhere
// 
// Extra notes: None

using namespace std;

//This is the class where everything will be stored
class GlobalClass
{
public:
    //Sprites
    Integer playerImage;

    //All of the objects
    list<Framework> gameObjects;

    GlobalClass()
    {
        //Load player image
        playerImage = agk::LoadImage("SprPlayer.png");
    }

    //This is used to add objects to the game
    Integer objectCreate(Framework object)
    {
        //Append it to gameObjects
        gameObjects.insert(gameObjects.end(), object);
    }
};

最后,调用它的main部分。

//Needed practically everywhere
GlobalClass global;

void app::Begin(void)
{
    agk::SetVirtualResolution (960, 540);
    agk::SetClearColor( 151,170,204 );
    agk::SetSyncRate(60,0);
    agk::SetScissor(0,0,0,0);

    //Load in some of them objects m8
    oPlayer ObjPlayer;
    ObjPlayer.playerInit(0, 0, global);
    global.objectCreate(ObjPlayer);
}

正如我所说,我正在使用AGK库来开发游戏,所以这就是app:Begin,它只是游戏开始时调用的第一件事。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

每个错误代码都有自己的文档页面(或者至少它应该有)。 C2061的页面首先说

  

编译器找到了一个不期望的标识符。确保在使用之前声明了标识符。

错误发生在oPlayer.h的第22行。假设我已正确计算,那条线看起来像这样......

void playerInit(Real X, Real Y, GlobalClass globalObject)

该错误还表明相关标识符为GlobalClass。因此,似乎在声明playerInit之前声明了GlobalClass

这只是猜测,但我怀疑正在编译的.cpp文件中有一个#include的GlobalClass.h。反过来,#include oPlayer.h将第二次尝试#include GlobalClass.h。但是,GlobalClass.h开头的#pragma once将保持第二个包括起任何影响。

编译器将继续执行oPlayer类和playerinit方法的声明。此时我们在GlobalPlayer.h的第5行 - 在GlobalClass类的声明之前 - 以及在oPlayer.h的第22行,因此标识符GlobalClass未定义。