所以我有一个我正在研究AGK库的游戏,我有两个与手头问题相关的类:oPlayer
和GlobalClass
。 oPlayer
是Framework
的孩子,GlobalClass
只是一个全球范围的类,用于存储游戏中的所有内容。编译时发生错误,VS 2013没有抱怨它。
这是错误
首先,对不起所有的代码,我只是绝对不知道是什么导致这个。
所以有问题的文件是
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
,它只是游戏开始时调用的第一件事。
非常感谢任何帮助。
答案 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
未定义。