ошибка iphone: ожидается '=', ',', ';', 'asm' или '__attribute__' перед '' foo ' - PullRequest
20 голосов
/ 13 июня 2009

Я пытаюсь перенести пример talkhere в другое приложение, и у меня возникают проблемы. Я скопировал все файлы и все фреймворки, но по какой-то причине я получаю кучу ошибок компиляции, которых раньше никогда не видел, и поэтому не знаю, что делать. Разница лишь в том, что я не предъявляю иск IB, и поэтому мне пришлось немного его изменить.

Что означает error: expected '=', ',', ';', 'asm' or '__attribute__' before 'foo'? ... Я получаю эту ошибку несколько раз для разных файлов

В моей ситуации первая ошибка указывает на 'MeterTable' .. класс, который включает <stdlib.h>, <stdio.h> и <math.h>. Но эти файлы, кажется, импортируются нормально (если я их удаляю, я получаю больше ошибок)

Любые предложения о том, как это отладить?

ТИА!

EDIT: Я все еще не могу понять это. Я буквально просто копирую файлы из примера в другой проект. Может кто-нибудь проверить это, пожалуйста? SpeakHerePort.zip и оригинал здесь SpeakHere.zip

Ответы [ 6 ]

40 голосов
/ 18 июня 2009

Ваша проблема в том, что вы компилируете SpeakHerePortAppDelegate.m, который является файлом Objective C, но он косвенно включает MeterTable.h, который является файлом заголовка C ++.

Переименуйте его в SpeakHerePortAppDelegate.mm (double m), чтобы он был скомпилирован как Objective C ++ и ваша проблема была решена.

Назовите все ваши файлы .mm, и тогда весь ваш код будет скомпилирован как Objective C ++

2 голосов
/ 27 марта 2011

В моем случае, рассматриваемые .h и .m хорошо построены с обычной целью, и приложение также может работать.

Однако после того, как подмножество файлов перемещено под цель статической библиотеки, она получает эту ошибку компиляции при сборке статической библиотеки.

Застрял на некоторое время и попробовал вышеупомянутые методы, к сожалению, они не помогли в моем случае.

Отмечено, что эта ошибка произошла только для строки NSString, например,

  • extern double const kTimeout; // fine
  • extern NSString* const kImageType; // compile error

После вышеприведенного анализа и небольшого перерыва, в конечном итоге проблема решается добавлением следующего импорта в .h - "Foundation/Foundation.h"

1 голос
/ 23 октября 2009

Возможно, это не относится к этой конкретной ситуации, но у меня тоже была эта точная ошибка, которая была вызвана неправильным предварительным объявлением. В Objective-C убедитесь, что ваши предварительные объявления начинаются со знака @ - например,

@class MyClass;

Те из нас, кто все еще на автопилоте из C ++, забудут @, увидят, что XCode выделил класс в качестве зарезервированного ключевого слова, и подумают, что с миром все в порядке. Это не так.

1 голос
/ 13 июня 2009

Звучит как незаконченное объявление, вероятно, в заголовочном файле. Ищите «foo» (или любой другой символ) во всех файлах проекта, используя usingF («Правка», «Найти», «Найти в проекте ...») в XCode, и / или изучайте заголовки, которые вы включаете, где находится MeterTable объявлен. Иногда компилятор запутывается в фактическом местонахождении ошибки, поскольку заголовочные файлы часто #imported в другие файлы, поэтому проблема может проявляться в нескольких местах.

0 голосов
/ 26 ноября 2009

У меня был похожий сценарий к некоторым постам выше. Я написал класс C ++ на основе примеров, приведенных в документации Audio Queue Services, и столкнулся с этой проблемой компиляции в тестовом проекте. Этот пост помог огромной сумме.

Сегодня я включил класс C ++ в свой проект и снова получил ошибку сборки. В моем сценарии мне также пришлось установить тип (используя окно «Информация») на sourcecode.cpp.objcpp для классаjective-c, который вызывал мой класс C ++.

0 голосов
/ 13 июня 2009

Это означает, что у вас есть синтаксическая ошибка. Если вставить вставленный код, его легче отладить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...