0

クラスに静的ポインタ変数を設定しようとしていますが、設定しようとしている変数ごとにこれらのエラーが発生します。

エラーC4430:型指定子がありません-intと見なされます。注:C++はdefault-intをサポートしていません

エラーC2040:'xscroll':'int'は'float*'とは間接レベルが異なります

エラーC2440:「初期化中」:「float**」から「int」に変換できません

これが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;
4

3 に答える 3

1

それらが定義であると仮定すると、タイプを含める必要があります(これが最初のエラーです)。

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

2番目のエラーについては、ではないように見えxscrollます。したがって、ではないfloatため、に割り当てることはできません。変数のタイプが正しいことを確認する必要があります。&xscrollfloat *Enemy::xscroll

于 2010-04-12T23:52:11.603 に答える
1

初期化と代入を混同していると思います。すべてのクラス静的変数は、グローバルスコープから一度定義する必要があり(つまり、定義はクラスまたは関数の外部にありますが、名前空間に含めることができます)、そのときに初期化できます。type identifier = initializer;この定義は、識別子にスコープ演算子が含まれていることを除けば、グローバル変数の定義と同じように見えます::

于 2010-04-12T23:53:00.557 に答える
0

たぶん、変数を変更するためのsetter / getter public staticメソッドを書くのが最善の方法ですか?そして、xscrollなどをプライベートに移動します。

それはより美しい解決策だと私は思います、そしてコードはより単純になるでしょう。

于 2010-04-13T00:52:30.223 に答える