Форум программистов, компьютерный форум CyberForum.ru

Почему не доступно число M_E в visual studio 2012 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
daemonik
 Аватар для daemonik
3 / 3 / 0
Регистрация: 24.04.2010
Сообщений: 37
12.12.2012, 15:18     Почему не доступно число M_E в visual studio 2012 #1
Доброго времени суток! Я сегодня столкнулся с проблемой в новой студии. В консольном приложении пишется ошибка:
Error 1 error C2065: 'M_E' : undeclared identifier
,
хотя эти 2 строчки
C++
1
2
#define _USE_MATH_DEFINES
#include <cmath>
у меня вставлены. В 2005 студии компилируется, в 2012 - нет. Что это может быть?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2012, 15:18     Почему не доступно число M_E в visual studio 2012
Посмотрите здесь:

C++ Долгая компиляция MS Visual Studio 2012
C++ Переход на Visual Studio 2012
C++ Visual Studio 2012 Ultimate Русская
C++ Visual Studio 2012 не воспринимает функцию cout<<
C++ Настройка SDL в Visual Studio 2012
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 15:34     Почему не доступно число M_E в visual studio 2012 #2
daemonik, пустой проект создать. Или добавить в stdafx.h этот макрос. Или в параметрах проекта.

Добавлено через 41 секунду
Ну это я описал как быть.
Причина такого поведения я думаю понятно.

Добавлено через 1 минуту
Ну вообще это не стандарт языка (например, его нет в С99) это расширение. Так что это не безопасно, лично я юзаю boost.
daemonik
 Аватар для daemonik
3 / 3 / 0
Регистрация: 24.04.2010
Сообщений: 37
12.12.2012, 15:36  [ТС]     Почему не доступно число M_E в visual studio 2012 #3
Цитата Сообщение от go Посмотреть сообщение
Причина такого поведения я думаю понятно.
Не совсем.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 15:39     Почему не доступно число M_E в visual studio 2012 #4
daemonik, макрос
C++
1
#define _USE_MATH_DEFINES
Должен идти перед включением
C++
1
#include <cmath>
daemonik, а что не помогло?
daemonik
 Аватар для daemonik
3 / 3 / 0
Регистрация: 24.04.2010
Сообщений: 37
12.12.2012, 15:40  [ТС]     Почему не доступно число M_E в visual studio 2012 #5
Цитата Сообщение от go Посмотреть сообщение
daemonik, макрос
C++
1
#define _USE_MATH_DEFINES
Должен идти перед включением
C++
1
#include <cmath>
daemonik, а что не помогло?
Всё так и писал.
Нет, помогло, просто мне не совсем понятно, почему в 2005 всё работает, а в 2012 ругается.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 15:42     Почему не доступно число M_E в visual studio 2012 #6
daemonik, я особо не пользовался 5-ой студией, так что сложно сказать как там работают предкомпилируемые заголовки.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,832
Записей в блоге: 2
Завершенные тесты: 1
12.12.2012, 18:43     Почему не доступно число M_E в visual studio 2012 #7
Заменить
C++
1
<cmath>
на
C++
1
<math.h>
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 18:45     Почему не доступно число M_E в visual studio 2012 #8
Croessmah, ну-ну. Зачем Вам Си-шный хедер. Одним словом фиговый вариант. ТС, не делай так.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,832
Записей в блоге: 2
Завершенные тесты: 1
12.12.2012, 18:58     Почему не доступно число M_E в visual studio 2012 #9
Цитата Сообщение от go Посмотреть сообщение
Croessmah, ну-ну. Зачем Вам Си-шный хедер. Одним словом фиговый вариант. ТС, не делай так.
Ну я сугубо про данный случай. А вообще, как мне кажется, ТС просто подключает впереди другие заголовки, да ведь?

Добавлено через 1 минуту
Для примера, в iostream включается math.h, поэтому, так работать не будет:
C++
1
2
3
#include <iostream>
#define _USE_MATH_DEFINES
#include <cmath>
а так будет:
C++
1
2
3
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
Добавлено через 1 минуту
go, в cmath все равно включается math.h
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 19:05     Почему не доступно число M_E в visual studio 2012 #10
Цитата Сообщение от Croessmah Посмотреть сообщение
А вообще, как мне кажется, ТС просто подключает впереди другие заголовки, да ведь?
Все возможно. Может и из-за stdfax.h (там тоже возможно включение, я склоняюсь к этому варианту). Я не видел проекта ТСа, поэтому мы этого скорее всего не узнаем.

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
go, в cmath все равно включается math.h
Ну нет же http://liveworkspace.org/code/bruS5$5
Изменив на cmath, тогда скомпилится.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,832
Записей в блоге: 2
Завершенные тесты: 1
12.12.2012, 19:09     Почему не доступно число M_E в visual studio 2012 #11
Цитата Сообщение от go Посмотреть сообщение
Может и из-за stdfax.h (там тоже возможно включение, я склоняюсь к этому варианту).
В 12 студии он выглядит так(всё лишнее поубирал):
stdafx.h
C++
1
2
3
4
5
6
#pragma once
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
targetver.h
C++
1
2
#pragma once
#include <SDKDDKVer.h>
Добавлено через 3 минуты
Цитата Сообщение от go Посмотреть сообщение
Ну нет же http://liveworkspace.org/code/bruS5$5
Изменив на cmath, тогда скомпилится.
А в Вашем примере, уберите std, ибо в math.h нет пространства имен.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.12.2012, 19:14     Почему не доступно число M_E в visual studio 2012 #12
Croessmah, Про перегрузку функций, специфичную для плюсов тоже забывать не стоит.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 19:15     Почему не доступно число M_E в visual studio 2012 #13
Цитата Сообщение от Croessmah Посмотреть сообщение
Там функции доступны как в пространстве std, так и в глобальном.
Студия далека от стандарт
У меня не скомпилилась в 10-ой студии(а она еще актуальна), да и если вы создадите пустой проект, то не скомпилится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 19:19     Почему не доступно число M_E в visual studio 2012
Еще ссылки по теме:

C++ Visual Studio 2012 Ошибка при компиляции программы
Visual Studio 2012 на x64 C++
C++ Где взять visual studio 2012?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,832
Записей в блоге: 2
Завершенные тесты: 1
12.12.2012, 19:19     Почему не доступно число M_E в visual studio 2012 #14
Цитата Сообщение от go Посмотреть сообщение
Студия далека от стандарт
Ну мелкософт считает, что стандарт далек от студии

Цитата Сообщение от go Посмотреть сообщение
У меня не скомпилилась в 10-ой студии(а она еще актуальна), да и если вы создадите пустой проект, то не скомпилится.
Ну так заголовок то сишный, а Вы ему пространство имен скормить пытались, поэтому и не скомпилировалось. Лично я ненавижу юзать математические функции через ::
Yandex
Объявления
12.12.2012, 19:19     Почему не доступно число M_E в visual studio 2012
Ответ Создать тему
Опции темы

Текущее время: 11:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru