0

添加新的 .h 和 .m 文件数据解析后,我的链接构建失败,我不太明白为什么。不过,我对objective-c 比较陌生。如果我删除包含(然后我必须从需要数据解析类的文件中删除对对象的引用),那么它不会失败。只是删除对象不会剪切它,当我尝试包含文件时它仍然失败。在链接下的错误部分中,它显示架构 i386 的一个重复符号

数据解析.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>

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

麦克风

4

1 回答 1

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 文件中的行就是一个定义。

于 2012-10-23T02:58:49.043 回答