Подтвердить что ты не робот

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

4b9b3361

Ответ 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, который вызывал мой класс С++.