构建无法使用extern指令导入const double

时间:2012-03-04 17:17:41

标签: objective-c cocoa

我有一个文件:

#import "OutletsHandler.h"


@implementation OutletsHandler

- (IBAction) pi : (id) sender
{
    extern const double PI; // here I try to import PI
    [textField setDoubleValue: PI];
}

- (id)init
{
self = [super init];
if (self) 
{
}

return self;
}

- (void)dealloc
{
    [super dealloc];
}

@end

OutletsHandler.h导入CalculatorScanner.h,这是CalculatorScanner.h:

#import <stdbool.h>

const double PI=3.141592654;

但是我遇到了语义问题:

Command /Developer/usr/bin/clang failed with exit code 1
ld: duplicate symbol _PI in /Users/ramy/Library/Developer/Xcode/DerivedData/Calculator-   crcetknqiorefpbjxcrtydequwxf/Build/Intermediates/Calculator.build/Debug/Calculator.build/Objects-normal/x86_64/CalculatorScanner.o and /Users/ramy/Library/Developer/Xcode/DerivedData/Calculator-crcetknqiorefpbjxcrtydequwxf/Build/Intermediates/Calculator.build/Debug/Calculator.build/Objects-normal/x86_64/CalculatorAppDelegate.o for architecture x86_64

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您的问题是,您在PI定义 CalculatorScanner.h,当您只是声明时。要使其正确编译和链接,请将其放在CalculatorScanner.h

extern const double PI;

并将其放入CalculatorScanner.cpp

const double PI = 3.141592654;

但在这种情况下,这也不是正确的解决方案。这里正确的解决方案是使用标准常量M_PI而不是定义自己的(不太准确)常量。

答案 1 :(得分:0)

如果您的意思是使用extern,那么就存在范围问题,您无法在方法中执行,它必须在全局范围内。