Интересно, что я проверил это в своем приложении и получил ту же ошибку.
Я потратил некоторое время, проверяя заголовки, чтобы выяснить, не было ли что-то, что не соответствует _USE_MATH_DEFINES
, и ничего не нашел.
Так что я переместил
#define _USE_MATH_DEFINES
#include <cmath>
, чтобы быть первым в моем файле (я не использую PCH, поэтому, если вы, у вас будет его после #include "stdafx.h"
) ивдруг он идеально скомпилируется.
Попробуйте переместить его выше на страницу.Полностью неуверенный относительно того, почему это могло вызвать проблемы.
Редактировать : понял это.#include <math.h>
встречается в охранниках заголовка cmath.Это означает, что что-то более высокое в списке #include включает cmath
без указания #define
.math.h
специально разработан для того, чтобы вы могли снова включить его в то определение, которое теперь изменено, чтобы добавить M_PI
и т. Д. Это НЕ в случае с cmath
.Поэтому вам нужно убедиться, что вы #define _USE_MATH_DEFINES
, прежде чем включать что-либо еще.Надеюсь, что это прояснит для вас:)
Если вы просто не включите math.h
, вы используете нестандартный C / C ++, как уже указывалось:)
Edit 2 : Или, как указывает Дэвид в комментариях, просто сделайте себя константой, определяющей значение, и вы все равно получите что-то более переносимое:)