【问题标题】:set static member pointer variables设置静态成员指针变量
【发布时间】:2011-02-07 05:49:33
【问题描述】:

我正在尝试在一个类中设置一个静态指针变量,但我尝试设置的每个变量都出现这些错误。

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

错误 C2040:“xscroll”:“int”与“float *”的间接级别不同

错误 C2440: 'initializing' : 无法从 'float **' 转换为 'int'

这里是代码 敌人.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;

【问题讨论】:

    标签: c++ static-variables class-variables


    【解决方案1】:

    也许编写 setter/getter 公共静态方法来更改变量是最好的方法?并将 xscroll 和其他内容移至私有状态。

    我认为这是更漂亮的解决方案,并且代码会更简单。

    【讨论】:

    • 所有静态变量仍需在类外定义。
    【解决方案2】:

    我认为您将初始化与分配混为一谈。所有类静态变量都必须在全局范围内定义一次(即定义在任何类或函数之外,但是可以在命名空间中)并且可以在那时初始化。这个定义看起来就像任何全局变量的定义,type identifier = initializer;,除了标识符包括范围运算符::

    【讨论】:

      【解决方案3】:

      假设这些是定义,您需要包含类型(这是第一个错误):

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

      至于第二个错误,看来xscroll不是float,所以&amp;xscroll不是float *,因此不能分配给Enemy::xscroll。您需要确保变量的类型正确。

      【讨论】:

      • 'xscroll' 显然是一个浮点数,这就是错误消息中的 float* 的来源。错误消息中的 int 来自 default-int (顺便说一句,C++ 不支持)。它肯定不是来自&amp;xscroll,除非有一些非常奇怪的运算符重载,否则它将是某种指针。第二个错误完全是由第一个引起的,因为没有指定类型,编译器无法证明类型兼容。
      • @BenVoigt - 很好的收获。也就是说,第三个错误中的float ** 来自哪里的任何线索?
      • 一旦出现语法错误,所有赌注都将关闭。也许编译器试图通过假设&amp;xscroll 意味着引用Enemy::xscroll 来恢复(分析文件的其余部分),在这种情况下,您在float* 变量上使用了地址运算符&amp;。这就是为什么试图从底部(最后一条消息)向上修复错误通常是一个失败的提议。
      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多