Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Call to undefined function 'pow'


Автор: Mastodont 14.1.2010, 11:34
Есть код
Код

// Рис. 2.21: fig02_21.cpp
// Вычисление сложного процесса

#include<iostream>

using std::cout;
using std::endl;
using std::ios;

#include<windows>

int rustext(char str[])
{
 char buffer[1024];
 CharToOem(str,buffer);
 cout << buffer;
}

#include<iomanip>

using std::setw;
using std::setiosflags;
using std::setprecision;

#include<cmath>

int main()
{
 double amount, // Сумма депозита
        principal = 1000.0, // инициализация principal
        rate = 0.05; // инициализация rate

 rustext("Год ");
 cout << setw(21);
 rustext("Сумма депозита");
 cout << endl;

 // установка формата числа с плавающей точкой
 cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(2);

 for (int year = 1; year <= 10; year++)
  {
   amount = principal * pow(1.0 + rate, year);
   cout << setw(4) << year << setw(21) << amount << endl;
  }

 system("pause");
 return 0;
}

При компиляции получаю сообщения
Цитата
[C++ Warning] fig02_21_vichislenie_slozhnogo_procenta.cpp(17): W8070 Function should return a value
[C++ Error] fig02_21_vichislenie_slozhnogo_procenta.cpp(43): E2268 Call to undefined function 'pow'
[C++ Warning] fig02_21_vichislenie_slozhnogo_procenta.cpp(49): W8004 'rate' is assigned a value that is never used
[C++ Warning] fig02_21_vichislenie_slozhnogo_procenta.cpp(49): W8004 'principal' is assigned a value that is never used

Я так понимаю, функция pow не определена. Насколько я знаю, для ее работы нужна директива cmath. Так я ее подключил. Почему же тогда получаю ошибку?

Автор: smoke_man 14.1.2010, 11:45
Вместо pow попробуй powf.

Автор: djamshud 14.1.2010, 11:49
pow объявлена в math.h

Автор: Лапоть 14.1.2010, 11:51
#include <math.h> - и будет тебе счастье! smile 

Автор: baldina 14.1.2010, 12:06
насоветовали...  smile 

pow() находится в пространстве std, поэтому 
Код

amount = principal * std::pow(1.0 + rate, year);


..............

Цитата

Код

#include<iomanip>
using std::setw;
using std::setiosflags;
using std::setprecision;
#include<cmath>
int main()
....



setw и проч из iomanip ты вносишь в область видимости, то же надо сделать и для функций из cmath

Автор: smoke_man 14.1.2010, 12:33
Ну почему же сразу насоветовали smile 
Если тс использует Builder, то в нем cmath имеет следующий вид:
Код

/*  cmath.h

    Standard C header file wrapper for math.h
*/

/*
 *      C/C++ Run Time Library - Version 13.0
 *
 *      Copyright (c) 1997, 2007 by CodeGear
 *      All Rights Reserved.
 *
 */

/* $Revision: 20509 $ */

#define  __USING_CNAME__
#include <math.h>
#undef   __USING_CNAME__

#if !defined(_USE_OLD_STL)
#include <yvals.h>
_C_STD_BEGIN
_C_LIB_DECL
float (atan2f)(float, float);
float (cosf)(float);
float (expf)(float);
float (ldexpf)(float, int);
float (logf)(float);
float (powf)(float, float);
float (sinf)(float);
float (sqrtf)(float);
float (tanf)(float);
_END_C_LIB_DECL
_C_STD_END
#endif

Автор: Mastodont 14.1.2010, 13:21
Спасибо всем, добавил в код
Код

#include<math>

и все скомпилилось.

Этот код я взял у Дейтлов. Значит, он должен в таком же виде и у меня работать? В чем же дело? Различие компиляторов?

Автор: Mastodont 14.1.2010, 13:37
Еще вопрос: почему когда я убираю из
Код

cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(2);

параметр ios::showpoint, точка из числа все равно не убирается?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)