0

我定义的常量给了我“未声明的标识符”问题。我将它们放在一个Constants.h文件中,该文件包含在我的 .pch 文件中。我认为这可能与我的 .pch 文件有关,但是,如果我从那里删除它并#import在需要其中一个常量的类之一中尝试它,那么我仍然会收到“未声明的标识符”错误。

如果我将每一#define行直接放在 .m 类文件的顶部,它们就可以工作。所以我的语法是正确的。

所以它与 .h 文件本身有关,但我不知道是什么。

//
//  Constants.h

// Sliding Drawer
#define kOffscreenX 320    // X coord when Sliding Drawer is offscreen
#define kVisibleX 40       // X coord when Sliding Drawer is visible

// WordlistButton
#define kNumScores 3

// Fonts
#define kMessageFontSize 14
#define kScoreFontSize 10
4

2 回答 2

3

仅从这段代码中不可能看到错误。预处理器往往会产生非常混乱的东西,尤其是在涉及循环导入时。

您可以尝试删除标头的当前编译版本,注意它不在derived data文件夹中,它在 XCode 的缓存中(请参阅 Project -> Build Setttings -> Precompiled Headers Cache Path)。

但是,如果您尝试Constants.h直接导入但没有成功,则问题可能出在其他地方。

你确定只有 1 个文件被调用Constants.h吗?请注意,您应该为您的文件使用前缀(例如SAConstants.h,如果Smooth Almonds是您的名字)以避免与 Apple 的标题或您正在使用的库的标题发生冲突。

如果您直接导入标题,请转到.m文件并点击Product -> Generate Output -> Preprocessed File并在其中找到Constants.h导入。是你的头吗?

顺便说一句,有一篇关于在预编译头文件中避免这种事情的好文章http://qualitycoding.org/precompiled-headers/

于 2013-04-03T09:59:19.723 回答
0

由于upper case parameter我的定义语句中的另一个错误,我发现了这个线程。我用小写字母解决了我的问题:

#define MSB(BTvalue) ((uint8_t) (BTvalue >> 8))  //threw this error

BTvalue更改为仅使用小写参数的让我很高兴

#define MSB(value) ((uint8_t) (value >> 8)) 
于 2016-10-14T10:52:40.550 回答