2016-02-17 2 views
0

Когда я обновление моего проекта на 64-битную в VS2010, это дает ниже 2 ошибки компилятора для упомянутой строки кода:RC2021: ожидаемое значение показателя, а не «6»

RC1116: RC терминатор после ошибки препроцессора

RC2021: ожидаемое значение экспоненты, а не «6».

const float AXIS_WIDTH = 2E6F; 

Может кто-нибудь предложить, как я могу решить эту проблему? Этот код отлично компилируется в VC++. Net 2003.

+0

Знаете ли вы, что он делает в VC++. Net? –

+0

Вы, вероятно, хотите 'const float AXIS_WIDTH = 2000000.0;'. '2e6f' тоже должен работать. –

+1

Работает для меня с VS2010 (x64) и VS2015 (x64). –

ответ

0

Префикс «RC» в номере ошибки и сообщении является большой подсказкой. Это не компилятор C++, который отключает этот код, а resource compiler.

Компилятор ресурсов даже не понимает весь язык C. Он имеет минимальный препроцессор, который выполняет постоянную подстановку. Он не понимает объявления переменных, таких как:

const float AXIS_WIDTH = 2E6F; // invalid for resource compiler 
const float AXIS_HEIGHT = 2.0;  // invalid for resource compiler 
const int THE_ANSWER = 42;  // invalid for resource compiler 

Единственное, что он понимает макросы:

#define THE_ANSWER 42 

Великий, так что теперь только вопрос, почему это компилируется компилятором ресурсов. Я предполагаю, что вы знаете, вводите ли вы его в файл ресурса вашего проекта (.rc), поэтому я думаю, что у вас есть его в файле resource.h, который входит в файл ресурсов (который, в свою очередь, , скомпилированный компилятором ресурсов).

Переместить это константное объявление в другой заголовочный файл, то есть , а не, включенный в файл ресурсов вашего проекта. Он отлично работает со всеми версиями компилятора C++, так же как Simon и др. сказали. Значения с плавающей запятой в любом случае мало полезны в файле ресурсов.

+0

Фактически файл abc.h содержит это определение, которое включено в файл abc.rc2 becuase некоторые другие переменные: # define в abc.h. Что делать, если я назначил 2000000.0F AXIS_WIDTH? это неправильное решение? –

+0

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