Iphone error: expected '=', ',', ';', 'asm' или '__attribute__' перед '' foo '
Я пытаюсь перенести пример verhere в другое приложение, и у меня возникают проблемы. Я скопировал все файлы и все фреймворки, но по какой-то причине я получаю кучу ошибок компиляции, которые я никогда раньше не видел и, следовательно, не знаю, что делать. Единственное различие заключается в том, что я не подал в суд на IB, и поэтому мне пришлось немного изменить его.
Что означает error: expected '=', ',', ';', 'asm' or '__attribute__' before 'foo'
?... Я получаю эту ошибку несколько раз для разных файлов
В моей ситуации первая ошибка указывает на "MeterTable".. класс, который включает <stdlib.h>
, <stdio.h>
и <math.h>
. Но эти файлы, кажется, импортируют штраф (если я удалю их, я получаю больше ошибок)
Любые предложения по отладке этого?
ТИА!
EDIT:
Я все еще не могу понять это. Я буквально просто копирую файлы из примера в другой проект. Может кто-нибудь проверить это, пожалуйста? SpeakHerePort.zip, а оригинал здесь SpeakHere.zip
Ответы
Ответ 1
Ваша проблема в том, что вы компилируете SpeakHerePortAppDelegate.m, который является объектным C файлом, но он косвенно включает MeterTable.h, который является заголовочным файлом С++.
Переименуйте его в SpeakHerePortAppDelegate.mm(double m), чтобы он был скомпилирован как Objective С++, и ваша проблема решена.
Назовите все ваши файлы .mm, а затем весь ваш код будет скомпилирован как Objective С++
Ответ 2
В моем случае вопросы .h и .m строятся нормально с обычной целью, и приложение также может работать.
Однако после того, как подмножество файлов перемещается под целью статической библиотеки, оно получает эту ошибку компиляции при создании статической библиотеки.
Застрял на некоторое время и попробовал вышеупомянутые методы, к сожалению, они не помогли в моем случае.
Отмечено, что эта ошибка произошла только для NSString *, например,
-
extern double const kTimeout; // fine
-
extern NSString* const kImageType; // compile error
После вышеописанного анализа и небольшого разрыва, проблема будет решена путем добавления следующего импорта в .h - "Foundation/Foundation.h"
Ответ 3
Это звучит как незавершенное объявление, возможно, в файле заголовка. Найдите "foo" (или как бы там ни было символ) во всех файлах проекта, используя ⇧⌘F (Edit ▸ Find ▸ Find In Project...) в Xcode и/или просмотрите заголовки, в которые вы указываете, где MeterTable объявлен. Иногда компилятор путается с фактическим местоположением ошибки, поскольку файлы заголовков часто переносятся в другие файлы, поэтому проблема может проявляться в нескольких местах.
Ответ 4
Это, возможно, не применимо к этой точной ситуации, но у меня тоже была эта точная ошибка, которая была вызвана неправильным форвардным объявлением. В Objective-C убедитесь, что ваши объявления вперед начинаются с знака @- например.
@class MyClass;
Те из нас, кто еще на автопилоте из С++, забудут @, см., что XCode выделил класс как зарезервированное ключевое слово и подумал, что все хорошо с миром. Это не так.
Ответ 5
Это означает, что у вас есть синтаксическая ошибка. Если вы вставляете код, о котором идет речь, его легче отлаживать.
Ответ 6
У меня был аналогичный сценарий для некоторых из вышеперечисленных сообщений. Я написал класс С++, основанный на примерах в документации по службам очереди аудио, и имел эту проблему компиляции в тестовом проекте. Это сообщение помогло получить огромную сумму.
Сегодня я включил класс С++ в свой проект и снова получил ошибку построения. В моем сценарии я также должен был установить тип (используя окно "Получить информацию" ) в sourcecode.cpp.objcpp для класса objective-c, который вызывал мой класс С++.