设置静态成员指针变量
我想在一个类中设置一个静态指针变量,但我得到这些错误,我尝试设置每个变量。设置静态成员指针变量
错误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;
我想你正在混合初始化与赋值。所有类的静态变量必须从全局范围定义一次(即定义在任何类或函数之外,可以在命名空间中),并且可以在那个时候初始化。该定义看起来就像任何全局变量的定义type identifier = initializer;
除了标识符包含范围操作符::
。
假设这些都是定义,你需要包含的类型(这是第一个错误):
float *Enemy::xscroll = ...;
Player *Enemy::player = ...;
至于第二个错误,看来xscroll
不是float
,所以&xscroll
不是float *
因此不能被分配到Enemy::xscroll
。你需要确保你的变量的类型是正确的。
也许编写setter/getter公共静态方法来改变变量是最好的办法吗?并移动xscroll和其他人私人。
这是更美丽的解决方案,我认为,代码将会更简单。
所有静态变量仍然需要在类之外定义。 – 2010-04-13 01:10:22
'xscroll'显然是一个浮点数,这就是错误消息中'float *'的来源。错误信息中的“int”来自default-int(BTW C++不支持)。它肯定不是来自'&xscroll',它禁止一些真正奇怪的操作符重载,会是某种指针。第二个错误完全是由第一个引起的,编译器无法证明这些类型是兼容的,因为没有指定类型。 – 2010-04-13 00:52:09
@BenVoigt - 很好的捕捉。这就是说,第三个错误中的float **出现的任何线索? – 2010-04-13 01:00:11
一旦出现语法错误,所有投注都将关闭。也许编译器试图恢复(分析文件的其余部分),假设'&xscroll'指的是'Enemy :: xscroll',在这种情况下,你有一个运算符'&'的地址*变量。这就是为什么试图修复底部错误(最后一条消息)的原因通常是失败的。 – 2010-04-13 01:13:23