我有一个文件:
#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
我做错了什么?
答案 0 :(得分:2)
您的问题是,您在PI
中定义 CalculatorScanner.h
,当您只是声明时。要使其正确编译和链接,请将其放在CalculatorScanner.h
:
extern const double PI;
并将其放入CalculatorScanner.cpp
:
const double PI = 3.141592654;
但在这种情况下,这也不是正确的解决方案。这里正确的解决方案是使用标准常量M_PI
而不是定义自己的(不太准确)常量。
答案 1 :(得分:0)
如果您的意思是使用extern,那么就存在范围问题,您无法在方法中执行,它必须在全局范围内。