Подтвердить что ты не робот

IOS - Дублирующий символ _OBJC_IVAR

операторский класс:

#import <Foundation/Foundation.h>


@interface operator : NSObject {

int number;
}

@property int number;

@end

@implementation operator

- (id)init{
    self = [super init];
    if (self) {
    [self setNumber:0];
    }
    return self;
}

@synthesize number;
@end

main.m:

#import <UIKit/UIKit.h>
#import "operator.m"

int main(int argc, char *argv[]) {

id operator1 = [[operator alloc] init];
id operator2 = [[operator alloc] init];

[operator1 setNumber:10];
[operator2 setNumber:20];

int answer = [operator1 number] + [operator2 number];

printf("The answer is %d",answer);



NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

Я получаю сообщение об ошибке → ld: duplicate symbol _OBJC_IVAR_$_operator.number in /Volumes/Home/Desktop/testing/build/testing.build/Debug-iphonesimulator/testing.build/Objects-normal/i386/operator.o and /Volumes/Home/Desktop/testing/build/testing.build/Debug-iphonesimulator/testing.build/Objects-normal/i386/main.o

Это мой первый раз, когда я программирую в ObjC. Я что-то делаю неправильно?

Я попробовал исправление "Очистить все цели", которое я нашел в Google, но не помогло.

4b9b3361

Ответ 1

  • Вы никогда не должны #import a .m файл в другой файл. Вы импортируете файл .h, если это необходимо.
  • У вас не должно быть кода, выполняющегося в main, перед созданием пула автозапуска. Это рано или поздно вызовет проблемы. В этом случае вы должны проверить код, вероятно, в application:didFininshLaunching.

Ответ 2

Участвует статическая библиотека

Я добавил класс, который имел то же имя, что и класс в статической библиотеке, которую я также использовал. Поэтому добавление префикса имени моего класса решило проблему.

Ответ 3

Поиск из файла .m, который можно импортировать в любом файле. Иногда его трудно найти

Ответ 4

Для других пользователей, где вышеупомянутые решения не были, это было то, что было не так с моим. Я ленивый программист, поэтому вместо того, чтобы переписывать весь код для новой страницы (UIView), я часто копирую и вставляю предыдущие UIView.m и .h файлы... При этом иногда забываю изменить имя интерфейс внутри файлов .m и .h, которые я скопировал (даже если я изменил имена файлов)... Это вызовет эту же проблему. Удачи всем остальным это тоже произошло!