Установить переменные указателя статического элемента
-
26-09-2019 - |
Вопрос
Я пытаюсь установить статическую переменную указателя в классе, но я получаю эти ошибки для каждой переменной, которую я пытаюсь установить.
Ошибка C4430: Спецификатор отсутствующего типа - INT предполагается. Примечание: C ++ не поддерживает default-int
Ошибка C2040: «XScrolle»: «int» отличается в уровнях косвения от «Float *»
Ошибка C2440: «Инициализация»: не может преобразовать из «Float **», чтобы «INT»
Вот код врага.
#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
. Отказ Вам необходимо убедиться, что типы ваших переменных верны.
Возможно, написание сеттера / Getter общественные статические методы для изменения переменных - лучший способ? И переместить XScroll и другие STO Private.
Я думаю, что это более красивое решение, и код будет проще.