我在其他帖子中看到过这个问题,但在我的情况下,我使用的是sphere.h文件,其中包含球体顶点的数据,即我的游戏项目的3D模型。我将sphere.h文件导入到我的Objective-C Class中,如下所示:
#import "SceneEnergyGlobe.h"
#import "sphere.h"
@interface SceneEnergyGlobe() {
}
@property (strong, nonatomic) GLKTextureInfo *textureInfo0;
@end
.....
编译项目时,收到此编译错误。我怎么解决这个问题?
这是sphere.h的内容:
#ifndef SPHERE_HEADER
#define SPHERE_HEADER
unsigned int sphereNumVerts = 2280;
float sphereVerts [] = {
0.0743889747124915, -0.49384436095363, -0.0241703260695731,
0.190555012144643, -0.979722062440628, -0.0619150039460291,
0.000000, 0.95,
0.0632787269334132, -0.49384436095363, -0.0459747512867777,
0.162096012330563, -0.979722074526971, -0.11776900895863,
0.050000, 0.95,
0.125000004921036, -0.475528075643002, -0.0908176095396332,
0.269869905435848, -0.942722669663907, -0.196071931295133,
.....
答案 0 :(得分:0)
对于包含.m
的每个实现文件(sphere.h
),将创建顶点数组的新副本。当这些实现文件链接在一起时,您会得到重复的符号错误。
最好的方法是在sphere.h
中更改此内容:
#define sphereNumVerts 2280
extern float sphereVerts[sphereNumVerts];
并添加包含sphere.m
定义的实施文件(sphereVerts
):
#import "sphere.h"
float sphereVerts[sphereNumVerts] = {
0.0743889747124915, -0.49384436095363, -0.0241703260695731,
...
};
顺便说一句,那些看起来像float
的大数字;你确定你不想要double
吗?
(编辑:我之前的建议是错误的;您也会在头文件中使用const
获得重复的符号。我已将其更改为#define
)。
答案 1 :(得分:-1)
在.h文件中创建和初始化变量是一个非常非常糟糕的主意!!!