0

新しい.hおよび.mファイルのデータ解析を追加した後、リンクでビルドエラーが発生しますが、その理由がよくわかりません。私はobjective-cの方が新しいです。インクルードを削除すると(データ解析クラスが必要なファイルからオブジェクトへの参照を削除する必要があります)、失敗しません。オブジェクトを削除するだけではカットされず、ファイルを含めようとすると失敗します。リンクの下のエラーセクションに、アーキテクチャi386の1つの重複するシンボルが表示されます

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

リンカーで何かが2回起こっているようですが、私の実験ではそれが見つかりませんでした。両方の.hファイルに

#import <UIKit/UIKit.h>

しかし、私は1つを削除し、それは動作しません。

マイク

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 により、コンパイラとリンカーは、どこかで定義された変数のコピーが 1 つ存在することを認識できます。.m ファイルの行はその 1 つの定義です。

于 2012-10-23T02:58:49.043 に答える