Сборка не смогла импортировать const double с директивой extern - PullRequest
0 голосов
/ 04 марта 2012

У меня есть файл:

#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 ]

2 голосов
/ 04 марта 2012

Ваша проблема в том, что вы определяете PI в CalculatorScanner.h, тогда как вы должны просто объявить . Для правильной компиляции и компоновки вставьте это в CalculatorScanner.h:

extern const double PI;

и поместите это в CalculatorScanner.cpp:

const double PI = 3.141592654;

Но в данном случае это тоже не совсем правильное решение. Правильным решением здесь является использование стандартной константы M_PI вместо определения собственной (менее точной) константы.

0 голосов
/ 05 марта 2012

Существует проблема с областью действия, если вы хотите использовать extern, вы не можете сделать это в методе, она должна быть в глобальной области действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...