2012-02-20 22 views
1

FMParallaxChild.h引起內聯的extern重複符號

typedef struct { 
    // ... 
} FMParallaxSetting; 

inline extern FMParallaxSetting FMParallaxSettingMake(CGPoint ratio, CGPoint startPos, CGPoint offset, CGPoint relVel, int zOrder); 
inline extern FMParallaxSetting FMParallaxSettingMake(CGPoint ratio, CGPoint startPos, CGPoint offset, CGPoint relVel, int zOrder) { 
    // ... 
} 

FMParallax.h

#import "FMParallaxChild.h" 
.... 

MyController.h

#import "FMParallax.h" 
.... 

AppDelegate.m

#import "MyController.h" 
.... 

從這個簡化的設置我得到一個重複的符號鏈接錯誤:

ld: duplicate symbol _FMParallaxSettingMake in MyController.o and AppDelegate.o 

我找不到任何進口環和我只在一個地方輸入FMParallaxChild.h,所以我究竟做錯了什麼?

回答

4

聲明爲static inline爲C或objc:

static inline FMParallaxSetting 
    FMParallaxSettingMake(CGPoint ratio, 
         CGPoint startPos, 
         CGPoint offset, 
         CGPoint relVel, 
         int zOrder) { 
    // ... 
} 

或對C只是inline ++或objC++:

inline FMParallaxSetting 
    FMParallaxSettingMake(CGPoint ratio, 
         CGPoint startPos, 
         CGPoint offset, 
         CGPoint relVel, 
         int zOrder) { 
    // ... 
} 
當然

,用C++和objC++,你的程序將依傍在這種情況下的一個定義規則(這是一個很好的默認值)。

的問題,因爲它是,是,這將是出口的每個翻譯它是可見的(#include d)英寸

+0

我試過內聯,但沒有運氣... – 2012-02-20 09:06:25

+2

@Aram那麼你很可能*不*編譯爲C++或objC++。 – justin 2012-02-20 09:07:41

+0

賓果,更名爲.mm,一切都很好,謝謝!出於好奇,在這種情況下使用'static'有什麼作用? – 2012-02-20 09:13:37