Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2011, 21:44   #1
CofeIn
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 10
По умолчанию C. Что-то с math.h. Не работает pow.

Ситуация: я писала программу с использованием функции pow. Я подключила библиотеку math.h, несколько раз проверила написание - всё правильно.На этапе компиляции мне выдали ошибку (ниже). Оказалось, что если закомментить строку с возведением в степень, всё будет в порядке. Для пробы я написала простую программу только с этой строкой и выводом (ниже). И всё равно не работает. А при нажатии на строку с указанием ошибки, я перехожу на вкладку math.h. Код, на который ссылаетс указание, тоже ниже.

Код пробной программы:
Код:
#include <iostream>
using namespace std;
#include <math.h>

void main ()
{
cout<<pow(2,2);
}
Что выдаётся при компиляции:

1>c:\documents and settings\админ\мои документы\visual studio 2008\projects\test2\test2.cpp(7) : error C2668: 'pow' : ambiguous call to overloaded function
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(575): could be 'long double pow(long double,int)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(527): or 'float pow(float,int)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(489): or 'double pow(double,int)'
1> while trying to match the argument list '(int, int)'


На какую строку во вкладке math.h я перехожу при нажатии на строку с ошибкой:

inline float __CRTDECL pow(_In_ float _X, _In_ int _Y)
{return (_Pow_int(_X, _Y)); }


Самое интересное, что раньше всё работало.

Последний раз редактировалось Stilet; 19.02.2011 в 08:59.
CofeIn вне форума Ответить с цитированием
Старый 18.02.2011, 21:55   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вам написано об ошибке, и вполне понятно.
Код:
#include <iostream>
#include <math.h>//вообще надо бы cmath использовать, но оставлю это на вашей совести
using namespace std;

int main ()
{
    cout<<pow((float)2.0,2);//помогаем компилятору выбрать нужную функцию
}
а если используется переменные то компилятор обычно может с легкостью выбрать нужную функцию.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.02.2011, 22:16   #3
CofeIn
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 10
По умолчанию

Да, действительно, не хватало 0 после числа.
А вот теперь вопрос: чем отличается math.h от cmath, о котором вы писали? Я ещё до этого момента не дошла, а в википедии написано только про math.h.
CofeIn вне форума Ответить с цитированием
Старый 18.02.2011, 22:21   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

math.h это вообще библиотека С, а не С++.
cmath повторяет её(но является частью стандарта С++), но все функции находятся в пространстве имен std+там еще пара вариантов функции pow.

итог, если б в компиле не было совместимости с С, то оно б не скомпилилось.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.02.2011, 22:26   #5
CofeIn
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 10
По умолчанию

Ясно. Но я сейчас С и изучаю).
CofeIn вне форума Ответить с цитированием
Старый 18.02.2011, 22:30   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
#include <iostream>
using namespace std;
cout<<
а давно это С стало?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.02.2011, 22:33   #7
CofeIn
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 10
По умолчанию

Так написано в уроках. Не знаю).
CofeIn вне форума Ответить с цитированием
Старый 18.02.2011, 22:55   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

значит уроки всетаки по С++, ибо то что я выделил это С++.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с функцией pow в С, использую GCC maryan.vetrov Помощь студентам 0 07.06.2010 04:12
Call to undefined function 'pow' fs444 Общие вопросы C/C++ 4 14.01.2010 14:34
не работает ф-я pow Denni$ Общие вопросы C/C++ 2 09.06.2009 02:44
не работает, что-то не так. Анжелика Помощь студентам 2 06.12.2008 21:47
delphi pow? Happyman Помощь студентам 2 13.05.2008 19:40