установить статические переменные указателя члена - PullRequest
0 голосов
/ 13 апреля 2010

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

ошибка C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int

ошибка C2040: «xscroll»: «int» отличается по уровню косвенности от «float *»

ошибка C2440: «инициализация»: невозможно преобразовать из «float **» в «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;

Ответы [ 3 ]

1 голос
/ 13 апреля 2010

Я думаю, что вы путаете инициализацию с назначением. Все статические переменные класса должны быть определены один раз из глобальной области (т. Е. Определение находится за пределами какого-либо класса или функции, однако может находиться в пространстве имен) и могут быть инициализированы в это время. Это определение выглядит так же, как и определение любой глобальной переменной, type identifier = initializer;, за исключением того, что идентификатор включает оператор области действия ::.

1 голос
/ 13 апреля 2010

Предполагая, что это определения, вам нужно включить тип (это первая ошибка):

float *Enemy::xscroll = ...;
Player *Enemy::player = ...;

Что касается вторых ошибок, похоже, что xscroll не является float, поэтому &xscroll не является float * и поэтому не может быть присвоено Enemy::xscroll. Вы должны убедиться, что типы ваших переменных верны.

0 голосов
/ 13 апреля 2010

Может быть, написание открытых статических методов setter / getter для изменения переменных - лучший способ? И переместить xscroll и другие в приват.

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

...