Программирование на iOS - Дубликат символа _OBJC_IVAR - PullRequest
21 голосов
/ 14 августа 2010

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

#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, но не помог.

Ответы [ 5 ]

93 голосов
/ 14 августа 2010
  1. Вы никогда не должны #import .m файл в другой файл. Вы импортируете файл .h, если он необходим.
  2. У вас не должно быть кода, выполняемого в main, до создания пула автоматического выпуска. Это рано или поздно вызовет проблемы. В этом случае тестовый код, вероятно, должен вместо этого указывать application:didFininshLaunching.
3 голосов
/ 23 июля 2013

В статическую библиотеку

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

1 голос
/ 27 декабря 2011

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

0 голосов
/ 26 ноября 2018

В моем случае я обнаружил двойное объявление для файла .m в моих Этапах сборки -> Компиляция источников .Удаление дубликата решило проблему для меня.Надеюсь, это поможет.

0 голосов
/ 26 января 2012

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

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