在添加新的.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>
但我删除了一个,但它不起作用。
麦克
答案 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文件中的行是一个定义。