2012-02-18 4 views
4

Итак, я пишу немного кода, который должен поднять возвращаемое значение функции до определенной мощности. Недавно я обнаружил, что использование оператора «^» для возведения в степень бесполезно, потому что в C++ это фактически оператор XOR или что-то в этом роде. Теперь вот код, который я хочу написать:pow() из библиотеки math.h - Как применять с помощью функций

int answer = pow(base, raisingTo(power)); 


Теперь может кто-нибудь сказать мне, если это правда? Я объясню код. Я объявлял int-переменный ответ, как вы все знаете, и инициализировал его значением любой переменной, называемой «базой», поднятой до возвращаемого значения функции raiseTo(), действующей на любую другую переменную с именем «power». Когда я это делаю (и я редактирую & скомпилировать свой код в Visual C++ 2010 Express Edition), появляется красная черточка под словом «pow», и появляется сообщение об ошибке: «более одного экземпляра перегруженной функции« pow »соответствует аргументу список "

Может кто-то решить эту проблему для меня? И могли бы вы, ребята, также объяснить мне, как работает вся эта функция pow(), потому что откровенно ссылки на www.cplusplus.com немного запутываются, поскольку я все еще только новичок!

+0

Я не новичок в программировании, я всего лишь новичок в C++. Спасибо, Джо. –

+0

@Joey Без пути. это создает хорошие навыки программирования. –

+0

@RamSidharth. В стороне, как ваш код написан выше, вы будете терять точность; в другом число, возвращаемое из pow(), будет усечено, что прекрасно, если это то, что вы хотите. Кроме того, я нахожу, что Visual Studio делает слишком много работы и мешает, когда это не должно. –

ответ

6

The documentation заявляет это довольно явно уже:

Перегрузка pow(int, int) больше недоступна. Если вы используете эту перегрузку, компилятор может испустить C2668 [EDIT: Это ошибка, которую вы получаете]. Чтобы избежать этой проблемы, введите первый параметр в double, float или long double.

Кроме того, для расчета базысила вы просто написать

pow(base, power) 

И с подсказкой выше:

int result = (int) pow((double)base, power); 
+0

Большое спасибо за ваш ответ, Джо. –

+0

@Joey Было бы отбрасывать возврат pow() быть необходимым, обычно C++ просто усекает значение, входящее в «ответ». Или это ВСП мешает? –

+0

Майк Д: Не знаю. Я думаю, что в C вам придется бросить. Я не знаю, нужно ли это на C++. – Joey

0

военнопленный() функция возвращает либо double или a float, поэтому первым шагом было бы изменить answer к одному из них. Во-вторых, что возвращается raisingTo(). Если вы не делаете то, что не очевидно, вам это не нужно, но он все равно должен работать. Кроме того, оба аргумента должны быть doubles, в соответствии с this.

+0

Большое спасибо за ваш ответ, Майк Д. –