2010-04-12 112 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