我正在开发一个应用程序,我需要定义几个将在多个类中使用的常量。我已经在一个.h文件中定义了所有常量(比如“constants.h”)并在myAppName_Prefix中导入了该文件.pch文件位于项目的“Other sources”文件夹中。使用这些常量的类正在编译时没有任何错误,但其他类,我声明了一些UISwipeGestureRecognizers,将错误称为“数字常量之前的预期标识符< / STRONG>” 这是显示错误的其中一个类的代码片段:
if (gesture.direction==UISwipeGestureRecognizerDirectionLeft)
我将常量定义为:
#define heading 1
#define direction 2
#define statement 3
#define refLink 4
#define correctResponse 5
#define incorrect1Response 6
如果我在每个班级中单独定义它们,那么一切都工作正常。 任何人都可以建议我如何解决这个问题。
答案 0 :(得分:4)
预处理代码后
if (gesture.direction==UISwipeGestureRecognizerDirectionLeft)
看起来像这样
if (gesture. 2==UISwipeGestureRecognizerDirectionLeft)
这显然不是有效的代码。
解决方案是在#defines前放置一个唯一的命名空间字符串。
#define hariDirection 2
或
#define kDirection 2
或者imho是最好的解决方案:不要使用#define
typedef enum {
heading = 1,
direction,
statement,
refLink,
correctResponse,
incorrect1Response,
} MyDirection;
这将做同样的事情,但它不会与其他方法和变量名冲突。
答案 1 :(得分:2)
我从gcc收到了同样的错误消息。
error: expected ')' before numeric constant
#define UNIQUE_NAME 0
在检查我的变量名称是唯一的之后,我意识到我在使用常量的代码中有一个拼写错误。
#define UNIQUE_NAME 0
//...
if (test_variable UNIQUE_NAME) { //missing ==
//...
}
简单的错误,但很难找到,因为gcc指向我#define
语句
答案 2 :(得分:1)
使常量名称唯一:
#define kHeading 1
#define kDirection 2
#define kStatement 3
#define kRefLink 4
#define kCorrectResponse 5
#define kIncorrect1Response 6