2012-02-20 10 views
1

FMParallaxChild.h重複シンボル

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 

私は、任意のインポートループを見つけることができないと私は私が間違って何をやっている、1つの場所でFMParallaxChild.hをインポートしますか?

答えて

4

は、CまたはにObjCのためstatic inlineとして、それを宣言します。

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

またはちょうどinline C++のかにObjC++:もちろん

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

を、C++とにObjC++で、あなたのプログラムは、上のフォールバックしますこの場合の1つの定義ルール(これは良いデフォルトです)。

問題、それはそれは(#include d)に表示されている各翻訳のためにエクスポートされるということです。

+0

私は、インラインを試してみましたが、運... –

+2

@Aramその後、あなたは*おそらくじゃないんだとC++やobjC++としてコンパイルしていません。 – justin

+0

ビンゴ、.mmに改名され、すべてがうまくいって、ありがとう!好奇心の外に、 'static 'を使用すると、この場合にどんな効果がありますか? –

関連する問題