0

別のプロジェクトからいくつかのコードをコピーし、以前のプロジェクトでは問題なく動作しましたが、新しいプロジェクトではリンク エラーが発生します。

OpengLWaveFrontCommon.h:50:22: エラー: タイプ 'VertexTextureIndex *' の変数をタイプ 'void *' の右辺値で初期化できません VertexTextureIndex *ret = malloc(sizeof(VertexTextureIndex));

このファイル (OpengLWaveFrontCommon.h) は、openGL iPhone プロジェクト: Wavefront OBJ Loader の一部です。https://github.com/jlamarche/iOS-OpenGLES-Stuff

C 構造なので、特別なフラグか何かを作成する必要がありますか?

#import <OpenGLES/EAGL.h>
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>

typedef struct {
    GLfloat red;
    GLfloat green;
    GLfloat blue;
    GLfloat alpha;
} Color3D;

static inline Color3D Color3DMake(CGFloat inRed, CGFloat inGreen, CGFloat inBlue, CGFloat inAlpha)
{
    Color3D ret;
    ret.red = inRed;
    ret.green = inGreen;
    ret.blue = inBlue;
    ret.alpha = inAlpha;
    return ret;
}


#pragma mark -
#pragma mark Vertex3D
#pragma mark -
typedef struct {
    GLfloat x;
    GLfloat y;
    GLfloat z;
} Vertex3D;

typedef struct {
    GLuint  originalVertex;
    GLuint  textureCoords;
    GLuint  actualVertex;
    void    *greater;
    void    *lesser;

} VertexTextureIndex;


static inline VertexTextureIndex * VertexTextureIndexMake (GLuint inVertex, GLuint inTextureCoords, GLuint inActualVertex)
{
    VertexTextureIndex *ret = malloc(sizeof(VertexTextureIndex));
    ret->originalVertex = inVertex;
    ret->textureCoords = inTextureCoords;
    ret->actualVertex = inActualVertex;
    ret->greater = NULL;
    ret->lesser = NULL;
    return ret;
}
4

1 に答える 1

5

問題の原因:

malloc()型のポインターを返しますvoid *。対応するデータ型に型キャストする必要があります。

malloc は、割り当てられた領域への void ポインタを返します。使用可能なメモリが不十分な場合は NULL を返します。void 以外の型へのポインターを返すには、戻り値で型キャストを使用します。戻り値が指す記憶領域は、基本的な位置合わせ要件以下の位置合わせ要件を持つ任意の型のオブジェクトの記憶域に対して適切に位置合わせされることが保証されます。

参照malloc()

問題の修正:

VertexTextureIndex *ret = (VertexTextureIndex *)malloc(sizeof(VertexTextureIndex));
于 2013-10-30T14:54:13.160 に答える