3

私はこれらのファイルを持っています:

Project.m

#import "Fraction.h"

int main(int argc, char *argv[]) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    Fraction *fraction = [[Fraction alloc] init];
    [fraction setNumerator: 2];
    [fraction setDenominator: 3];
    [fraction print];
    NSLog(@"%g", [fraction value]);
    [fraction release];
    [pool drain];
    return 0;
}

Fraction.m

#import "Fraction.h"

@implementation Fraction
-(void) setNumerator: (int) n {
    numerator = n;
}

-(void) setDenominator: (int) d {
    denominator = d;
}

-(void) print {
    NSLog(@"%i/%i\n", numerator, denominator);
}

-(double) value {
    return (double) numerator / denominator;
}
@end

Fraction.h

#import <Foundation/Foundation.h>

@interface Fraction: NSObject {
    int numerator, denominator;
}

-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(void) print;
-(double) value;
@end

次のようにファイルに配置します。

Objective-C
|_Fraction.h
|_Fraction.m
|_Project.m

ただし、これを実行すると (私は を使用してGNUstepいます)、次のエラーが発生します。

undefined reference to '__objc_class_name_Fraction'
4

1 に答える 1

3

このエラーは、Fraction.mがコンパイルまたはリンクされていないことを示しているため、プロジェクトをビルドしたときにFractionクラスが見つかりませんでした。

への追加を怠ると、このエラーが発生Fraction.mしますGNUmakefile

あなたはおそらくGNUmakefile次のようなものを持っています:

include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = MyProject
MyProject_OBJC_FILES = Project.m

include $(GNUSTEP_MAKEFILES)/tool.make

Fraction.mそれをOBJC_FILES行に含めるように変更します。

include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = MyProject
MyProject_OBJC_FILES = Project.m Fraction.m

include $(GNUSTEP_MAKEFILES)/tool.make

明らかに、あなたmakefileは違うかもしれませんが、あなたはその考えを理解します. Fraction.mソース ファイルのリストに必ず含めてください。

于 2013-08-09T16:20:42.167 に答える