【问题标题】:Assigning to GLfloat from incompatible type void从不兼容的类型 void 分配给 GLfloat
【发布时间】:2013-06-01 10:08:12
【问题描述】:

这快把我逼疯了。我必须在实现模拟侧视图中的水的 CCNODE 类的实现中进行下一个分配的 GLfloat(它来自我在 cocos2dForum 中找到的一个类) 更新:

-(id)initWithBounds:(CGRect)bounds count:(int)count damping:(float)damping diffusion:(float)diffusion;
{

    if((self = [super init])){
        _bounds = bounds;
        _count = count;
        _damping = damping;
        _diffusion = diffusion;

        _color = ccc4f(1.0f, 1.0f, 1.0f, 1.0f);

        _h1 = calloc(_count, sizeof(float));//Here 
        _h2 = calloc(_count, sizeof(float));// And here, is where I get the error.




        WaterTexture = [[CCTextureCache sharedTextureCache] addImage:@"watter.png"];
        //shader_ = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_Position_uColor];
        shader_ = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTexture];
        _textureLocation = glGetUniformLocation(shader_->_program, "u_texture");
        texturesize= 256*CC_CONTENT_SCALE_FACTOR();
        offset=0;

    }

    return self;
}

- (void)dealloc
{
free(_h1);
free(_h2);

[super dealloc];
}

这个类是在一个 Cocos3d 项目中实现的。在添加 Box2d 库之前,一切正常,模拟了水,但是在添加 Box2D 库之后,XCode 开始抱怨说“从不兼容的类型 void 分配给 GLfloat” 为什么会这样?真的很少见。。。 问候。 卡洛斯。

【问题讨论】:

  • box2d --> 你有没有把你的实现文件改成 .mm 扩展名?
  • 是的,我做到了,这很奇怪。
  • 您需要发布更多代码(尤其是在您对 GLFloat 类型变量进行赋值的情况下)并标记发生错误的行。
  • 我用更多代码更新了条目。谢谢!

标签: calloc cocos3d


【解决方案1】:

我假设 _h1 的类型是 CGFloat* 或 CGFloat[] - 如果它不是指针类型,那么这是一个问题。另一件事是 calloc 返回 void* 所以你需要转换它的返回值:

_h1 = (CGFloat*)calloc(..);

添加Box2D后出现错误很可能是由于Objective-C++的行为与Objective-C编译器不同,显然在这种情况下它不执行隐式转换,需要您手动添加转换。也许虽然编译器已经警告过你,但现在它被视为错误(因此建议:永远不要忽略警告!)。

【讨论】:

  • 将其转换为 GLFloat 使其工作,感谢@LearnCocos2D!我会投票,但我还没有声望……还没有!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多