将新文件/类添加到ios项目时的链接错误

时间:2012-10-23 02:45:56

标签: objective-c ios ios5

在添加新的.h和.m文件数据分析后,我在链接上出现构建失败,我不太明白为什么。虽然我比较客观。如果我删除include(然后我必须从需要dataparsing类的文件中删除对象的引用)然后它不会失败。只是删除对象不会削减它,当我尝试包含文件时它仍然失败。在链接下的错误部分中,它表示架构i386的一个重复符号

dataparsing.h是:

//
//  dataParsing.h
//  TelnetToICC
//
//  Created by **** on 10/8/12.
//
//

#import <UIKit/UIKit.h>



@interface dataParsing : UIView
{


}
- (void)getData:NSString:id;
-(void) parseLine:id;
-(void) parseDatagram:id;
-(void) reset;

@end

char icc_data[10000];
int data_top=-1;

这个想法只是为了处理字符串而编写一些简单的函数,所以我不想在这里做任何特别的事情,但我对objective-c更新。 ViewController.m中的数据分析包括:

#import "dataParsing.h"
#import "ViewController.h"
#import <CoreFoundation/CFSocket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

@implementation ViewController

似乎我为链接器做了两次事情,但我的实验还没有找到它。我注意到我的.h文件都有

#import <UIKit/UIKit.h>

但我删除了一个,但它不起作用。

麦克

1 个答案:

答案 0 :(得分:0)

重复的符号为_data_top。我猜也是_icc_data。问题是您在 dataparsing.h 文件中声明了一个全局变量。因此,对于包含此.h文件的每个文件,都会创建一个具有相同名称的新全局变量,从而导致重复的符号链接器错误。

您需要做的是更改行:

char icc_data[10000];
int data_top=-1;

为:

extern char icc_data[10000];
extern int data_top;

然后在 dataparser.m 文件中执行:

char icc_data[10000];
int data_top = -1;

.h文件中的extern允许编译器和链接器知道将在某处定义一个变量副本。 .m文件中的行是一个定义。