Дубликат символа вызван встроенным внешним - PullRequest
1 голос
/ 20 февраля 2012

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

Я не могу найти циклы импорта и импортирую только FMParallaxChild.h в одном месте, поэтомучто я делаю не так?

1 Ответ

4 голосов
/ 20 февраля 2012

Объявите его как static inline для c или objc:

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 ++ ваша программа в этом случае будет использовать правило единого определения (что является хорошим значением по умолчанию).

Проблема, как она есть, заключается в том, что она будет экспортироваться для каждого перевода, в котором она видна (#include d).

...