1

Constants.h我已经在我的项目文件中声明了这个小家伙:

extern int *exitDirection;

然后,我将他设置为一个整数。在这种情况下,它是 881,这是一个非常好的数字。

现在,我想在项目其他地方的 switch 语句中使用他:

    switch (exitDirection) {
        case kExitDirectionLeft:
            // Have him spawn on the right of the next level.
            break;
        case kExitDirectionRight:
            // Have him spawn on the left of the next level.
            break;
        default:
            break;
    }
}

我收到了可爱的错误消息"Statement requires expression of integer type (int * invalid),我认为这意味着我给它一个指向整数的指针,而不是一个实际的整数。kExitDirectionLeft 只是#define'd as 881,我试过用实际数字切换它,不高兴。还尝试将 int 切换为 NSNumber 或 NSInteger,同样的错误。

在这种情况下,为什么我不能使用这个外部定义的整数?我怎样才能让它工作?任何帮助表示赞赏!

修复了它,但这样做我现在触发了这个 Apple Mach-O Linker (Id) Error..

"_exitDirection", referenced from: 
  -[GameplayLayer positionHeroMale] in GameplayLayer.o
  -[GameCharacter checkAndClampSpritePosition] in GameCharacter.o
  -[GameplayLayer positionHeroMale] in GameplayLayer.o
  -[GameCharacter checkAndClampSpritePosition] in GameCharacter.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有任何想法吗?

4

2 回答 2

4
extern int *exitDirection;

在这里,您实际上声明了指向 int 的指针,您可能(取决于您如何创建它并为其设置值)在这里只需要普通的 int:

extern int exitDirection;

同样通过该声明,您只需告诉编译器 exitDirection 是在当前范围之外的某个地方创建的,变量本身不会被创建。您需要在某些实现文件中实际创建(并可能为其设置一些初始值),例如:

// Constants.m
int exitDirection = 0;
于 2012-05-16T13:07:43.397 回答
1

您声明exitDirectionint指针,并且需要switchint. 更改exitDirectionint或执行以下操作

switch(*exitDirection)
{
     ...
}
于 2012-05-16T13:07:52.913 回答