2015-07-16 5 views
0

Это ошибка, я получаю, когда я веду свой проект в Xcode:Apple, Mach-O Linker Error: 1 дубликат символа для Architechture

дубликат символа _coinsTotal в:

/Library/Developer/Xcode/DerivedData/AppName-fqlzuwivxudvndbinqsoudxkdzrg/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/Objects-normal/i386/ViewController.o 

/Library/Developer/Xcode/DerivedData/AppName-fqlzuwivxudvndbinqsoudxkdzrg/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/Objects-normal/i386/AppDelegate.o 

л.д.: 1 символ дубликата для архитектуры i386 clang: ошибка: команда компоновщика не сработала с кодом выхода 1 (используйте -v для вызова вызова)

Ошибка возникает из-за того, что я импортирую ViewController.h в свой AppDelegate.m, но мне нужно сделать это, чтобы я может добавить итоговые суммы монеты после моей награды vi део играет. Я добавил свой ViewController.h к моему AppDelegate.m в других приложениях без ошибок.

Любые идеи или предложения? Благодаря!

Вот мой код в файле ViewController.h на вершине:

#import <UIKit/UIKit.h> 

#import <Chartboost/Chartboost.h> 



int coinsTotal; 
int pointsLeft; 
int dailyTwenty; 


@interface ViewController : UIViewController <UIActionSheetDelegate> 

Вот код для моего файла AppDelegate.m:

#import "AppDelegate.h" 

#import "ViewController.h" 

#import <CommonCrypto/CommonDigest.h> 
#import <AdSupport/AdSupport.h> 
#import <Chartboost/Chartboost.h> 
#import <Chartboost/CBNewsfeed.h> 

@interface AppDelegate()<ChartboostDelegate> 

@end 

@implementation AppDelegate 
+0

Вы должны опубликовать свой код, так как это звучит так, как будто это дубликат ошибки импорта. Является ли ваш контроллер представлений контроллером корневого сервера для делегата приложения? Если это так, вы должны быть в состоянии добраться до него, говоря о окне.rootViewController и лить его как ваш контроллер представления – bolnad

+0

Как объявляется 'coinsTotal' в вашем файле ViewController.h? –

+0

@PhillipMills это * int coinsTotal; – LodgeApps

ответ

4

Вы объявляете свои три ИНТ значения в заголовочном файле как глобальные. Всюду вы включаете этот заголовок в свой код, вы будете определять/переопределять их.

Вы можете объявить их как экстерном в файле заголовка:

/* in ViewController.h */ 
extern int coinsTotal; 
extern int pointsLeft; 
extern int dailyTwenty; 

А потом объявить их один раз в верхней части AppDelegate.m вне кода @implementation.

/* in AppDelegate.m */ 
int coinsTotal = 0; 
int pointsLeft = 0; 
int dailyTwenty = 0; 
... 

@implementation AppDelegate 
... 
@end 

Но я бы предпочел, чтобы создать их в качестве членов одноплодного класса, а затем включить заголовочный файл интерфейса, где когда-либо вам нужно установить или прочитать значение.

+0

я попробовал это, но получили эту ошибку «_dailyTwenty», ссылочную из: - [ViewController didCompleteRewardedVideo:] в ViewController.o - [ViewController viewDidLoad] в ViewController.o – LodgeApps

+0

Что остальное сообщения? Вы объявляли int dailyTwenty; в файле appDelegate.m? –

+0

Просто сделал это, и он работает! Большое спасибо! – LodgeApps

1

Сформировать код, причина повторяющихся символов вы объявили три глобальные переменные в «ViewController.h»:

int coinsTotal; 
int pointsLeft; 
int dailyTwenty; 

решить эту проблему, объявить их как «Экстерн» в .h файл, а затем объявить их в файле .m:

/* in ViewController.h */ 
extern int coinsTotal; 
extern int pointsLeft; 
extern int dailyTwenty; 

/*in ViewController.m*/ 
int coinsTotal = 0; 
int pointsLeft = 0; 
int dailyTwenty = 0; 

в принципе, есть три причины повторяющихся символов:

  • включают файл .m, а не .h
  • объявляет глобальные переменные или символы в файле .h и включает его где-то еще
  • цикл импорта. например Импортирует B, B импортирует C, и C импортирует ...
-1

В моем случае, импорт .m вместо .h вызвал повторяющиеся символы.

Смежные вопросы