Установить переменные указателя статического элемента

StackOverflow https://stackoverflow.com/questions/2626150

Вопрос

Я пытаюсь установить статическую переменную указателя в классе, но я получаю эти ошибки для каждой переменной, которую я пытаюсь установить.

Ошибка 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.

Я думаю, что это более красивое решение, и код будет проще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top