【问题标题】:error: declaration of instance variables in the interface is deprecated [-Werror,-Wobjc-interface-ivars]错误:不推荐在接口中声明实例变量 [-Werror,-Wobjc-interface-ivars]
【发布时间】:2020-11-11 06:30:45
【问题描述】:

我刚刚从 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] 无效 *_reserved2;

/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSString.h:543:9: 错误:接口中实例变量的声明是 已弃用 [-Werror,-Wobjc-interface-ivars] 整数字节; ^ /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSString.h:545:9: 错误:接口中实例变量的声明是 已弃用 [-Werror,-Wobjc-interface-ivars] 诠释_未使用; ^

/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSNotification.h:39:11: 错误:在 接口已弃用 [-Werror,-Wobjc-interface-ivars] 无效 *_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]”

【问题讨论】:

  • 这似乎不是 c++
  • 错误信息非常准确。如果您绝对不能相应地更改代码,请删除导致此错误的编译器开关,如图所示。
  • 你可能是一个项目设置领先一步,需要一步一步重新开始。看我的回答

标签: objective-c


【解决方案1】:

正如repository README.md 在最后一行建议的那样,去阅读

https://github.com/Warzone2100/warzone2100/blob/master/macosx/README.md

然后一步一步完成要求。
它主要是用C++编写的,所以需要相应的处理。

您需要 CMake 3.15+, 在这里找到它https://cmake.org/download/#latest

也可以通过 Homebrew 获取文本

还有通过 Homebrew 实现的 Asciidoctor。

显然你使用的是 OSX 10.15+,你不需要 GCC,Xcode > 11 就可以了。

您的错误返回到虚假项目设置。
NSIndexSet 是属于 Foundation Framework 的类。 通常在这段代码中没有什么可以为你修复的。很确定这是因为假设 Objective-C++ 可以工作,这是将 C++ 包含到 Xcode 项目中的一种简单方法。如果您想更改将其添加到项目中的方式,请阅读有关使用 .mm 文件的更多信息,因为..

Readme.md 中两行之间的某处也写了..

“运行 CMake 生成 Xcode 项目”

【讨论】:

  • 我已经安装了所有工具,但是查看输出,我看到了一些危险信号。首先,它说找不到 gettext。确切的输出是: -- 寻找 gettext -- 寻找 gettext - 未找到 -- 寻找 iconv -- 寻找 iconv - 未找到 -- 寻找 strlcat -- 寻找 strlcat - 找到 ... 为什么没有它找到gettext?当我输入 gettext --version 时,我可以清楚地看到安装了 0.21 版本。
  • 自制软件就像一张过去的明信片。在 15 年的编码中永远无法保持高效。每个项目都有同样的烦恼。顺便说一句,gettext 是一个文本本地化(翻译管理器)工具,听起来很大,但与苹果框架相比是一个很小的功能。好吧,我的评论对您没有帮助。但也许你在标签 下在这里询问一些错误日志..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多