Objective c Apple Mach-O链接器错误:Architecture有1个重复符号
这是我在Xcode中运行项目时遇到的错误: 重复符号_coinstotalin:Objective c Apple Mach-O链接器错误:Architecture有1个重复符号,objective-c,xcode,linker-errors,mach-o,Objective C,Xcode,Linker Errors,Mach O,这是我在Xcode中运行项目时遇到的错误: 重复符号_coinstotalin: /Library/Developer/Xcode/DerivedData/AppName-fqlzuwivxudvndbinqsoudxkdzrg/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/Objects-normal/i386/ViewController.o /Library/Developer/Xcode/De
/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
ld:架构i386的1个重复符号
叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
出现此错误是因为我在AppDelegate.m中导入了ViewController.h,但我需要这样做,以便在奖励视频播放后添加硬币总数。我已将我的ViewController.h添加到其他应用程序中的AppDelegate.m,没有错误
有什么想法或建议吗?谢谢
下面是我在顶部ViewController.h文件中的代码:
#import <UIKit/UIKit.h>
#import <Chartboost/Chartboost.h>
int coinsTotal;
int pointsLeft;
int dailyTwenty;
@interface ViewController : UIViewController <UIActionSheetDelegate>
#导入
#进口
共有;
int pointsLeft;
每日20分钟;
@界面ViewController:UIViewController
以下是我的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
#导入“AppDelegate.h”
#导入“ViewController.h”
#进口
#进口
#进口
#进口
@接口AppDelegate()
@结束
@实现AppDelegate
您正在将头文件中的三个int值声明为全局值。在代码中包含此头的任何地方,都将定义/重新定义它们
您可以在头文件中将它们声明为extern:
/* in ViewController.h */
extern int coinsTotal;
extern int pointsLeft;
extern int dailyTwenty;
然后在@implementation代码之外的AppDelegate.m顶部声明它们一次
/* in AppDelegate.m */
int coinsTotal = 0;
int pointsLeft = 0;
int dailyTwenty = 0;
...
@implementation AppDelegate
...
@end
但我更愿意将它们创建为singleton类的成员,然后在需要设置或读取值的地方包含接口头文件。您将头文件中的三个int值声明为全局值。在代码中包含此头的任何地方,都将定义/重新定义它们 您可以在头文件中将它们声明为extern:
/* in ViewController.h */
extern int coinsTotal;
extern int pointsLeft;
extern int dailyTwenty;
然后在@implementation代码之外的AppDelegate.m顶部声明它们一次
/* in AppDelegate.m */
int coinsTotal = 0;
int pointsLeft = 0;
int dailyTwenty = 0;
...
@implementation AppDelegate
...
@end
但我更愿意将它们创建为singleton类的成员,然后在需要设置或读取值的地方包含接口头文件。在代码中,重复符号的原因是您在“ViewController.h”中声明了三个全局变量: 要解决此问题,请在.h文件中将它们声明为“extern”,然后在.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文件中声明全局变量或符号,并将其包含在其他位置
- 导入周期。e、 A进口B,B进口C,C进口A
/* 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文件中声明全局变量或符号,并将其包含在其他位置
- 导入周期。e、 A进口B,B进口C,C进口A
.m
而不是.h
会导致重复符号。在我的例子中,导入.m
而不是.h
会导致重复符号。你应该发布你的代码,因为这听起来像是重复的导入错误。您的视图控制器是应用程序代理的根ire控制器吗?如果是这样,那么您应该能够通过说出window.rootViewController并将其转换为您的视图控制器来实现它。在您的ViewController.h文件中声明的coinsTotal是什么?@PhillipMills它是*int coinsTotal;当autocomplete导入.m文件而不是.h文件时,我有一半的时间会出现此错误。您如何将viewController导入应用程序代理?@Alex Reynolds我没有导入.m文件,我将发布代理的开始代码。mYou应该发布您的代码,因为这听起来像是重复的导入错误。您的视图控制器是应用程序代理的根ire控制器吗?如果是这样,那么您应该能够通过说出window.rootViewController并将其转换为您的视图控制器来实现它。在您的ViewController.h文件中声明的coinsTotal是什么?@PhillipMills它是*int coinsTotal;当autocomplete导入一个.m文件而不是.h文件时,我有一半时间会出现此错误。您如何将viewController导入应用程序代理?@Alex Reynolds我没有导入一个.m文件,我将发布代理的开始代码。我尝试了此操作,但出现此错误“\u DailyTown”,引用自:-ViewController.o-[ViewController viewDidLoad]中的[ViewController DidCompleteEdwarded Video:]消息的其余部分是什么?您是否在appDelegate.m文件中声明了int DailyTown;?我尝试了此操作,但出现了以下错误“\u DailyTown”,引用自:-[ViewController DidCompleteEdwarded Video:]在ViewController.o中-[ViewController viewDidLoad]在ViewController.o中,消息的其余部分是什么?您是否在appDelegate.m文件中声明int dailytowen?