Objective c Apple Mach-O链接器错误:Architecture有1个重复符号

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

这是我在Xcode中运行项目时遇到的错误:

重复符号_coinstotalin:

/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

在代码中,重复符号的原因是您在“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

在我的例子中,导入
.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?