2010-04-12 110 views
0

我想在一个类中设置一个静态指针变量,但我得到这些错误,我尝试设置每个变量。设置静态成员指针变量

错误C4430:缺少类型说明符 - 假定为int。注意:C++不支持默认int

错误C2040: 'xscroll': '诠释' 的不同之处,从 '浮动*'

错误C2440间接的层次:初始化:不能从转换“浮动* *”到 '廉政'

下面是代码 Enemy.h

#include <windows.h> 
#include "Player.h" 

class Enemy 
{ 
public: 
Enemy(float xPos, float yPos); 
Enemy(void); 
~Enemy(void); 

//update the position of the user controlled object. 
void updatePosition(float timeFactor); 

//loads all the enemy textures 
void static loadTextures(); 

//creates a set number of enemies 
void static createEnemies(int numEnemies, Enemy * enemyArray); 

GLuint static enemyTex; 
static float * xscroll; 
static float * yscroll; 
static Player * player; 

private: 
bool checkCollison(float x, float y, int radius); 

float XPos; 
float YPos; 

}; 

尝试设置变量

Enemy::xscroll = &xscroll; 
Enemy::yscroll = &yscroll; 
Enemy::player = &player; 

回答

1

我想你正在混合初始化与赋值。所有类的静态变量必须从全局范围定义一次(即定义在任何类或函数之外,可以在命名空间中),并且可以在那个时候初始化。该定义看起来就像任何全局变量的定义type identifier = initializer;除了标识符包含范围操作符::

1

假设这些都是定义,你需要包含的类型(这是第一个错误):

float *Enemy::xscroll = ...; 
Player *Enemy::player = ...; 

至于第二个错误,看来xscroll不是float,所以&xscroll不是float *因此不能被分配到Enemy::xscroll。你需要确保你的变量的类型是正确的。

+0

'xscroll'显然是一个浮点数,这就是错误消息中'float *'的来源。错误信息中的“int”来自default-int(BTW C++不支持)。它肯定不是来自'&xscroll',它禁止一些真正奇怪的操作符重载,会是某种指针。第二个错误完全是由第一个引起的,编译器无法证明这些类型是兼容的,因为没有指定类型。 – 2010-04-13 00:52:09

+0

@BenVoigt - 很好的捕捉。这就是说,第三个错误中的float **出现的任何线索? – 2010-04-13 01:00:11

+0

一旦出现语法错误,所有投注都将关闭。也许编译器试图恢复(分析文件的其余部分),假设'&xscroll'指的是'Enemy :: xscroll',在这种情况下,你有一个运算符'&'的地址*变量。这就是为什么试图修复底部错误(最后一条消息)的原因通常是失败的。 – 2010-04-13 01:13:23

0

也许编写setter/getter公共静态方法来改变变量是最好的办法吗?并移动xscroll和其他人私人。

这是更美丽的解决方案,我认为,代码将会更简单。

+0

所有静态变量仍然需要在类之外定义。 – 2010-04-13 01:10:22