2012-04-04 2 views
1

Я столкнулся с проблемой в Xcode с ключевым словом operator. У меня это в файле заголовка (.h), но Xcode распознает его как ключевое слово из-за перекрытия оператора на C++, хотя я устанавливаю тип файла как заголовок C по умолчанию, а не заголовок C++. Код, который я пытаюсь собрать все написано в C и строка кода у меня возникают проблемы, как этоключевое слово оператора в Xcode

struct foo { 

    int a; 
    int b; 
    ... 

    char operator[80]; 
} 

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

Любая помощь будет оценена по достоинству.

+0

Я не понимаю, почему изменение имени переменной для другой вещи было бы проблемой. Если он компилируется сейчас, он должен скомпилироваться с измененным именем, даже для устройств низкого уровня. – EmilioPelaez

+0

Проблема в том, что я несу ответственность за перенос этого на iPhone, и поэтому есть некоторые изменения, которые я должен внести в общие файлы, чтобы он мог компилироваться, и поэтому мне пришлось бы изменить это определение, #ifdef IPHONEOS наверху и замените его в каждом файле с помощью этой структуры. Я не поддерживаю этот код, это еще одна команда, поэтому они посоветовали мне не касаться логики и имен переменных, только включает в себя и вызовы собственных функций. –

+0

Можете ли вы показать нам сообщение об ошибке? Это из компилятора или из среды IDE? (Я не использовал Xcode, поэтому не предполагайте, что я знаю, о чем говорю.) Если ваш код компилируется как C++, а не C, могут возникнуть другие тонкие проблемы; существуют конструкции, которые являются допустимыми C и действительными C++, но с другой семантикой (а 'operator' - не единственное ключевое слово C++). Выяснить, как скомпилировать C, намного лучше, чем работать с проблемой, изменяя идентификатор. –

ответ

1

Как насчет, если вы использовали препроцессор:

#define operator _operator 

? Поместите это в заголовочный файл, который читается перед вашим заголовком.

+0

И используйте определение идентификации #ifndef IPHONEOS –

+0

Не работает. Кажется, что компилятор распознает ключевое слово оператора даже в #define. Он не дает никаких ошибок, но не заменяет ключевое слово. Спасибо, в любом случае. –

+0

@ RaphaelAyres это работает для меня. Компилятор, выделяющий текст, неизбежен (поскольку вы используете его внутри структуры), но в конце он компилируется в правильный код. –

0

Тип файла, который имеет значение, - это файл, в который вы включаете заголовок. Если вы пытаетесь включить этот заголовок в файл C++, тогда эта ошибка ожидается, и этот способ не будет использоваться с C++. Если вы уже используете его только в файлах C, я не уверен, что проблема может быть.

+0

Файл не включается ни в какие источники, которые включены в сборку. Я не понимаю. У меня есть файлы C++ в этом проекте, но они также не находятся в сборке. На самом деле, любой .h, который я пишу «оператор», распознает как ключевое слово. –

+0

@RaphaelAyres: Если файл не включен ни в чем в сборке, почему он там? –

+0

Хотел бы я знать. Проект настолько сложный и имеет так много файлов, что я не удивлюсь этому. Я думаю, что он читает все файлы в папке проекта. Но мне все равно придется использовать его в какой-то момент проекта. –