#objective-c
#objective-c
Вопрос:
Я только что клонировал проект с github, и я пошел его создавать, и я сталкивался с этой ошибкой снова и снова. Есть идеи, в чем проблема?
Вот некоторые из моих выходных данных об ошибках и часть кода, который вызывает ошибку:
ПРИМЕЧАНИЕ: _indexSetFlags и _internal являются переменными, которые вызывают ошибку в этом примере кода
#import <Foundation/NSObject.h>
#import <Foundation/NSRange.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSIndexSet : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> {
@protected // all instance variables are private
struct {
NSUInteger _isEmpty:1;
NSUInteger _hasSingleRange:1;
NSUInteger _cacheValid:1;
NSUInteger _reservedArrayBinderController:29;
} _indexSetFlags;
union {
struct {
NSRange _range;
} _singleRange;
struct {
void * _data;
void *_reserved;
} _multipleRanges;
} _internal;
}
ВЫВОД ОШИБКИ:
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation .framework/Headers/NSAutoreleasePool.h:14:11: ошибка: объявление переменных экземпляра в интерфейсе устарело [-Werror,-Wobjc-interface-ivars] void *_reserved2;
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation .framework/Headers/NSString.h:543:9: ошибка: объявление переменных экземпляра в интерфейсе устарело [-Werror,-Wobjc-interface-ivars] int numBytes; ^ /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSString.h:545:9: ошибка: объявление переменных экземпляра в интерфейсе устарело [-Werror,-Wobjc-interface-ivars] int _unused; ^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation .framework/Headers/NSNotification.h:39:11: ошибка: объявление переменных экземпляра в интерфейсе устарело [-Werror,-Wobjc-interface-ivars] void *_impl; ^
фатальная ошибка: выдано слишком много ошибок, остановка сейчас [-ferror-limit=] генерируется 20 ошибок.
Не удалось выполнить следующие команды сборки: CompileC /Users/bananaman123/Desktop/eecs481/hw6/wz_build/lib/sdl/warzone2100.build/Debug/sdl-backend.build/Objects-normal/x86_64/cocoa_wz_menus.o lib/sdl/cocoa_wz_menus.mm нормальный x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (1 сбой)
Я пропустил большую часть выходных данных об ошибках, но все сообщения об ошибках содержат «ошибка: объявление переменных экземпляра в интерфейсе устарело [-Werror,-Wobjc-interface-ivars]»
Комментарии:
1. Похоже, это не c
2. Сообщение об ошибке очень точное. Если вы абсолютно не можете соответствующим образом изменить код, удалите переключатели компилятора, которые делают это ошибкой, как указано.
3. возможно, вы на один шаг впереди в настройке проекта, и вам нужно начинать все сначала, шаг за шагом. Смотрите мой ответ
Ответ №1:
Поскольку репозиторий README.md предлагает в самой последней строке пойти и прочитать
https://github.com/Warzone2100/warzone2100/blob/master/macosx/README.md
затем идите шаг за шагом и выполняйте требования.
В основном он написан на C и поэтому нуждается в соответствующей обработке.
Вам нужен CMake 3.15 , найдите его здесь https://cmake.org/download/#latest
также Gettext через Homebrew
и Asciidoctor также через Homebrew .
Поскольку вы, очевидно, используете OSX 10.15 , вам не нужен GCC, Xcode> 11 подойдет.
Ваши ошибки возвращаются к фиктивной настройке проекта.
NSIndexSet
— это класс, который принадлежит Foundation Framework. Обычно в этом коде нет ничего, что можно было бы исправить. Совершенно уверен, что это происходит, потому что предполагается, что Objective-C работает, что является простым способом включения C в ваш проект Xcode. Прочитайте больше о работе с .mm
файлами, если вы хотите изменить способ их добавления в ваш проект, потому что..
Где-то между строками в Readme.md также написано..
«Запустите CMake для создания проекта Xcode»
Комментарии:
1. У меня установлены все инструменты, но, просматривая выходные данные, я вижу несколько красных флажков. Во-первых, в нем говорится, что gettext не найден. Точный результат: — Ищем gettext — Ищем gettext — не найден — Ищем iconv — Ищем iconv — не найден — Ищем strlcat — Ищем strlcat — найдено … Почему он не находит gettext? когда я набираю gettext —version , я ясно вижу, что установлена версия 0.21.
2. homebrew похож на открытку из прошлого. никогда не мог поддерживать его продуктивность за 15 лет кодирования. у каждого проекта одни и те же проблемы. Кстати, gettext — это инструмент локализации текста (хранитель перевода), звучит грандиозно, но это крошечная функция по сравнению с фреймворками Apple. ну, мой комментарий вам не поможет. Но, возможно, вы спрашиваете под тегом <homebrew> или <brew> здесь, в SO, с некоторыми журналами ошибок..