2013-11-20 69 views
1

我在其他帖子中看到過這個問題,但在我的情況下,我使用了包含球體頂點數據的sphere.h文件,是,我的遊戲項目的3D模型。我將sphere.h文件導入到我的Objective-C類中,如下所示:鏈接器命令失敗,退出代碼1:重複的符號 - 沒有.m文件

#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.162096, -0.979722074526971, -0.11776900895863, 
    0.050000, 0.95, 
    0.125000004921036, -0.475528075643002, -0.0908176095396332, 
    0.269869905435848, -0.942722669663907, -0.196071931295133, 
    ..... 
+0

您是否聲明瞭具有全局作用域的變量,因此@interface/@ end塊的外部變量?顯示更多代碼。 –

+0

這不足以幫助你。但另一件事,className應該是Capital的「Sphere」。 –

+0

如果你調用'#include「sphere.h',會發生什麼? –

回答

0

對於包括sphere.h頂點數組的新副本將被創建的每個實現文件(.m)。當這些實現文件鏈接在一起時,會出現重複符號錯誤。

最好的辦法是在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

在.h文件中創建和初始化變量是一個非常非常糟糕的主意!

相關問題