首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的错误NSAssert

奇怪的错误NSAssert
EN

Stack Overflow用户
提问于 2012-03-16 22:49:34
回答 5查看 5.9K关注 0票数 48

我搞不懂为什么我会

代码语言:javascript
复制
use of undeclared identifier _cmd  did you mean rcmd

在NSAssert所在的线路上。

代码语言:javascript
复制
#import <Foundation/Foundation.h>

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int x = 10;

    NSAssert(x > 11, @"x should be greater than %d", x);

    [pool drain];
    return 0;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-16 23:18:45

在每个Objective-c方法中,都有两个隐藏变量id selfSEL _cmd

所以

代码语言:javascript
复制
- (void)foo:(id)bar;

是真的

代码语言:javascript
复制
void foo(id self, SEL _cmd, id bar) { ... }

当你打电话给

代码语言:javascript
复制
[someObject foo:@"hello world"]

它实际上是

代码语言:javascript
复制
foo( someObject, @selector(foo), @"hello world")

如果您cmd-单击NSAssert跳转到它的定义,您将看到它是一个宏,它使用了您从中调用它的方法的隐藏_cmd变量。这意味着如果你不在Objective-c方法中(也许你在‘main’中),因此你没有_cmd参数,你就不能使用NSAssert。

相反,您可以使用替代的NSCAssert。

票数 110
EN

Stack Overflow用户

发布于 2012-03-16 23:08:49

NSAssert is only meant to be used within Objective-C methods.由于main是一个C函数,因此请改用NSCAssert

票数 30
EN

Stack Overflow用户

发布于 2012-03-16 23:01:56

尝试替换

NSAssert(x > 11,NSString字符串格式:@“x应大于%d",x);

使用

NSCAssert(x > 11,NSString字符串格式:@“x应大于%d",x);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9739460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档