variabili puntatore membro insieme statici
-
26-09-2019 - |
Domanda
Sto cercando di impostare una variabile puntatore statica in una classe, ma sto ottenendo questi errori per ogni variabile cerco di serie.
Errore C4430: manca indicatore di tipo - int assunto. Nota: C ++ non supporta default-int
error C2040: 'XScroll': 'int' differisce nei livelli di riferimento indiretto da 'float *'
Errore C2440: 'inizializzazione': non può convertire da 'float **' a 'int'
Ecco il codice 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;
};
cercando di variabili set
Enemy::xscroll = &xscroll;
Enemy::yscroll = &yscroll;
Enemy::player = &player;
Soluzione
credo che tu stia mescolando l'inizializzazione con assegnazione. Tutte le variabili di classe statiche devono essere definiti una volta, dalla portata globale (cioè la definizione è fuori di qualsiasi classe o funzione, può essere in un namespace tuttavia) e può essere inizializzato in quel momento. Questo sembra definizione proprio come la definizione di una variabile globale, type identifier = initializer;
tranne che l'identificatore include l'operatore ::
campo di applicazione.
Altri suggerimenti
Supponendo che queste sono le definizioni, è necessario includere il tipo (che è il primo errore):
float *Enemy::xscroll = ...;
Player *Enemy::player = ...;
Per quanto riguarda il secondo errori, sembra che xscroll
non è un float
, quindi &xscroll
non è un float *
e pertanto non può essere assegnato a Enemy::xscroll
. È necessario assicurarsi che i tipi di variabili sono corrette.
Forse la scrittura setter / metodi statici getter pubblici di modificare le variabili è il modo migliore? E spostare XScroll e altri STO privato.
E 'la soluzione più bella, penso, e il codice sta per essere più semplice.