設定された静的メンバポインタ変数
-
26-09-2019 - |
質問
私はクラスの静的ポインタ変数を設定しようとしているが、私は私が設定しようと変数ごとにこれらのエラーを取得しています。
エラーC4430:欠落している型指定 - intが想定さ。注:C ++をサポートしていませんデフォルト-INT
エラーC2040: 'xscroll': 'int型異なり間接のレベルでから 'フロート*'
エラーC2440: '初期化':から変換できません 'フロート**' から '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;
解決
私はあなたが割り当てと初期化を混合していると思います。すべてのクラスの静的変数はグローバルスコープから、一度定義されなければならない(定義は外部の任意のクラスまたは関数であり、すなわち、しかし、名前空間にあることができる)、その時点で初期化することができます。ただ識別子はスコープ演算子type identifier = initializer;
が含まれていることを除き、すべてのグローバル変数の定義、::
のようなこの定義のルックスます。
他のヒント
それらが定義されていると仮定すると、あなたは(最初のエラーです)タイプを含める必要があります:
float *Enemy::xscroll = ...;
Player *Enemy::player = ...;
xscroll
がfloat
なく、したがって&xscroll
に割り当てることができないので、は第二のエラーについては、そのfloat *
がEnemy::xscroll
ない現れます。あなたは必ず、あなたの変数の型が正しいか確認する必要があります。
たぶん、変数を変更するにはセッター/ゲッターのpublic staticメソッドを書くことは最善の方法は何ですか?そして、移動xscrollなどSTOプライベートます。
それは私が考える、より美しい解決策だし、コードをよりシンプルになるだろうされます。
所属していません StackOverflow