Проблема с макросами (#define), показывающая ожидаемый идентификатор перед числовой константой, в iPad - PullRequest
7 голосов
/ 24 марта 2011

Я разрабатываю приложение, в котором мне нужно определить несколько констант, которые будут использоваться более чем в одном классе. Я определил все свои константы в одном файле .h (скажем, «constants.h») и импортировал этот файл в myAppName_PrefixФайл .pch, расположенный в папке «Другие источники» проекта. Классы, использующие эти константы, компилируются без ошибок, но другие классы, в которых я объявил некоторые UISwipeGestureRecognizer, выдают ошибку как « Ожидаемый идентификатор перед числовой константой"это фрагмент кода одного из классов, который показывает ошибку:

if (gesture.direction==UISwipeGestureRecognizerDirectionLeft)

я определил мои константы как:

#define heading 1
#define direction 2
#define statement 3
#define refLink 4
#define correctResponse 5
#define incorrect1Response 6

, если я определю их в каждом классеиндивидуально то все как работает нормально.Может ли кто-нибудь, пожалуйста, предложить мне способ, как решить эту проблему.

Ответы [ 3 ]

4 голосов
/ 24 марта 2011

После предварительной обработки вашего кода

if (gesture.direction==UISwipeGestureRecognizerDirectionLeft)

выглядит так

if (gesture. 2==UISwipeGestureRecognizerDirectionLeft) 

и это явно недействительный код.

Решение состоит в том, чтобы поместить уникальную строку пространства имен перед вашим # определением.

#define hariDirection 2

или

#define kDirection 2

Или imho лучшее решение: не используйте #define

typedef enum {
    heading = 1,
    direction,
    statement,
    refLink,
    correctResponse,
    incorrect1Response,
} MyDirection;

Это будет делать то же самое, но не будет конфликтовать с другими именами методов и переменных.

2 голосов
/ 13 января 2016

Я получаю то же сообщение об ошибке от gcc.

error: expected ')' before numeric constant
 #define UNIQUE_NAME 0

После проверки уникальности имен моих переменных я понял, что в той точке кода, где использовалась константа, была опечатка.

#define UNIQUE_NAME 0
//...
if (test_variable UNIQUE_NAME) { //missing ==
//...
}

простая ошибка, но ее сложно найти, потому что gcc указал мне на #define утверждение

1 голос
/ 24 марта 2011

Сделайте так, чтобы имена ваших констант были уникальными:

#define kHeading 1
#define kDirection 2
#define kStatement 3
#define kRefLink 4
#define kCorrectResponse 5
#define kIncorrect1Response 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...