这是我在Xcode中运行项目时遇到的错误:
重复符号_coinsTotal in:
/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:1个体系结构i386的重复符号 clang:错误:链接器命令失败,退出代码为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>
以下是我的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 :(得分:4)
您将头文件中的三个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
但我更喜欢将它们创建为单例类的成员,然后在需要设置或读取值的地方包含接口头文件。
答案 1 :(得分:1)
形成代码,重复符号的原因是你在&#34; ViewController.h&#34;中声明了三个全局变量:
int coinsTotal;
int pointsLeft;
int dailyTwenty;
解决这个问题,将它们声明为&#34; extern&#34;在.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;
基本上,重复符号有三个原因:
答案 2 :(得分:-1)
就我而言,导入.m
而不是.h
会导致重复的符号。