variables de puntero miembro de conjunto estático
-
26-09-2019 - |
Pregunta
Estoy tratando de establecer una variable puntero estático en una clase, pero estoy recibiendo estos errores para cada variable que intento conjunto.
Error C4430: falta el especificador de tipo - int asumió. Nota: C ++ no soporta por defecto-int
Error C2040: 'XScroll': 'int' difiere en niveles de indirección de 'float *'
Error C2440: 'inicialización': no ??se puede convertir de 'float **' a 'int'
Este es el código 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;
};
tratando de las variables de ajuste
Enemy::xscroll = &xscroll;
Enemy::yscroll = &yscroll;
Enemy::player = &player;
Solución
creo que estás mezclando con asignación de inicialización. Todas las variables estáticas clase tienen que ser definidas una vez, de ámbito global (es decir, la definición es fuera de cualquier clase o función, puede estar en un espacio de nombres sin embargo) y puede ser inicializado en ese momento. Esta definición se parece a la definición de cualquier variable global, type identifier = initializer;
excepto que el identificador incluye la ::
operador alcance.
Otros consejos
Suponiendo que esas son las definiciones, es necesario incluir el tipo (que es el primer error):
float *Enemy::xscroll = ...;
Player *Enemy::player = ...;
En cuanto a los segundos errores, parece que xscroll
no es un float
, por lo &xscroll
no es un float *
y por lo tanto no se puede asignar a Enemy::xscroll
. Es necesario asegurarse de que los tipos de variables son correctos.
Tal vez escribir métodos estáticos setter / getter públicas para cambiar las variables es la mejor manera? Y mover XScroll y otros sto privada.
Es la solución más bello, creo, y el código va a ser más sencillo.