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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
daemonik
 Аватар для daemonik
3 / 3 / 0
Регистрация: 24.04.2010
Сообщений: 37
#1

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

12.12.2012, 15:18. Просмотров 1246. Ответов 13
Метки нет (Все метки)

Доброго времени суток! Я сегодня столкнулся с проблемой в новой студии. В консольном приложении пишется ошибка:
Error 1 error C2065: 'M_E' : undeclared identifier
,
хотя эти 2 строчки
C++
1
2
#define _USE_MATH_DEFINES
#include <cmath>
у меня вставлены. В 2005 студии компилируется, в 2012 - нет. Что это может быть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3584 / 1364 / 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++
3584 / 1364 / 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++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 15:42     Почему не доступно число M_E в visual studio 2012 #6
daemonik, я особо не пользовался 5-ой студией, так что сложно сказать как там работают предкомпилируемые заголовки.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,490
Записей в блоге: 2
Завершенные тесты: 1
12.12.2012, 18:43     Почему не доступно число M_E в visual studio 2012 #7
Заменить
C++
1
<cmath>
на
C++
1
<math.h>
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 18:45     Почему не доступно число M_E в visual studio 2012 #8
Croessmah, ну-ну. Зачем Вам Си-шный хедер. Одним словом фиговый вариант. ТС, не делай так.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,490
Записей в блоге: 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++
3584 / 1364 / 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
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,490
Записей в блоге: 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
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
12.12.2012, 19:14     Почему не доступно число M_E в visual studio 2012 #12
Croessmah, Про перегрузку функций, специфичную для плюсов тоже забывать не стоит.
go
Эксперт C++
3584 / 1364 / 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
Еще ссылки по теме:

Visual Studio 2012 на x64 C++
C++ Где взять visual studio 2012?
C++ Как подключить библиотеки OpenCV 3.0.0 к visual studio 2012?
C++ Не корректная работа visual studio 2012 Express
Открытие процессов visual studio 2012 C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,490
Записей в блоге: 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
Ответ Создать тему
Опции темы

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