Ver la Versión Completa : mensaje de error UNIT.OBJ
saludos a todos los del foro. Estoy haciendo un programa para calcular el metodo de simpson y al compilar me manda el siguiente mensaje de error:
[Linker Error] Unresolved external 'f(float)' referenced from C:\SIMPSON\UNIT1.OBJ
no saben a que se debe esto.... les agradecere cualquier ayuda
saludos y gracias de antemano
atte Noe
nemesio
17-07-2006, 20:27:03
Pues pareciera que te muestra el error por alguna variable declarada tipo float.
saludos.
Bueno agradezco tu interes nemesio. Te agradecere si me puedes ayudar un poco ya que yo programo en delphi y no en c++ builder y no le entiendo mucho con lo que respecta a la declaracion de variables. mira el codigo que tengo es el siguiente:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_CalcularClick(TObject *Sender)
{
float f(float x);
int n,i;
float a,b,h,s,s2,s4,x,ts2,ts4,s13,suma;
char opc;
a=b=h=s=x=s13=suma=0;
a=StrToFloat(Edt_a->Text);
b=StrToFloat(Edt_b->Text);
n=StrToFloat(Edt_Numero->Text);
do
{
if(n%2 !=0)
ShowMessage("el numero debe ser un numero par");
}while(n%2 !=0);
h=(b-a)/n;
s=f(a)+f(b);
Edt_Fa->Text=FloatToStr(f(a));
Edt_Fb->Text=FloatToStr(f(b));
Edt_h->Text=h;
Edt_s->Text=s;
Edt_x->Text=x;
/****************************SIMPSON 1/3**********************************/
//se evaluan los valor de x donde x=x+h en el intervalo (a,b)
x=a+h;
for(int i=1; i<=n-2; i++)
{
f(x);
x+=h;
}
//segun el metodo simpson 1/3 algunos valores seran 2*f(x) o 4*f(x)
x=a+h;
for(i=1; i<=n-1; i++)
{
if(i%2 == 0) //2*f(x)
{
s2=2*f(x);
ts2+=s2;
}
else //4*f(x)
{
s4=4*f(x);
ts4+=s4;
}
x+=h;
}//for
suma = (f(a)+f(b))+(ts2+ts4);
s13=(suma*h)/3;
/*************************************************************************/
Edt_Suma->Text=FloatToStr(suma);
Edt_S13->Text=FloatToStr(s13);
}
//-----------------------------------------------------------
Agradezco toda ayuda.... que variable puede ser :confused:
Bueno creo que el problema es con la funcion:
float f(float x); que declaro debajo del void, pero donde tengo que declarar eso.......
maeyanes
17-07-2006, 21:08:21
Pues a simple vista, no veo donde esté declarada e implementada la función f...
Corrigiendo, ya vi: float f(float x);, aquí estas declarando una función f que recibe un float y devuelve un valor del mismo tipo, pero no existe la implementación de esta función...
Algo así (solo un ejemplo):
float f(float x)
{
/* Calculo de la función en x */
return x * x;
}
Saludos...
Gracias por responder... ya hice lo que me dijiste y no funciona.-
Que cosa puede ser mira yo tengo este codigo en c: y lo quiero pasar a c Builder.: que estoy pasando mal en el codigo.......:confused:
/*Este programa implememta el algoritmo de integración de simpson 1/3
//librerias a utilizar
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
//definicon de la funcioon
float f(float x);
//programa principal
void main()
{
int n;
float a,b,h,s,s2,s4,x,ts2,ts4,s13,suma;
char opc;
do
{
a=b=h=s=x=s13=suma=0;
clrscr();
gotoxy(27,1);
cout<<"METODO DE SIMPOSON 1/3 \n\n\n";
cout<<"\t\tPrporcione los valores del intervalo [a,b] \n\n";
cout<<"Propocione el valor de a: ";
cin>>a;
cout<<"Propocione el valor de b: ";
cin>>b;
do
{
cout<<"\nPropocione el numero de puntos: ";
cin>>n;
if(n%2 !=0)
cout<<"\n\n!!!! ERROR n DEBE SER UN NUMERO PAR !!!!";
}while(n%2 !=0);
h=(b-a)/n;
s=f(a)+f(b);
cout<<"\n\nPor lo tanto...";
cout<<"\n f(a) = "<<f(a);
cout<<"\n f(b) = "<<f(b);
cout<<"\n h= "<<h;
cout<<"\n s= "<<s;
cout<<"\n x= "<<x;
/****************************SIMPSON 1/3**********************************/
//se evaluan los valor de x donde x=x+h en el intervalo (a,b)
clrscr();
gotoxy(10,1);
cout<<"EVALUACION DE f(x) CON x=x+h en el intervalo abierto
("<<a<<","<<b<<")\n\n";
cout<<"x \t\t\t f(x)\n\n";
x=a+h;
cout<<x<<"\t\t\t"<<f(x)<<"\n";
for(int i=1; i<=n-2; i++)
{
f(x);
x+=h;
cout<<x<<"\t\t\t"<<f(x)<<"\n";
}
getch();
//segun el metodo simpson 1/3 algunos valores seran 2*f(x) o 4*f(x)
clrscr();
x=a+h;
gotoxy(10,1);
cout<<"RESULTADOS DEL PRODUCTO 2*f(x) 0 4*f(x) PARA x=x+h \n\n\n";
cout<<"x\t\t\tf(x)\n\n";
for(i=1; i<=n-1; i++)
{
if(i%2 == 0) //2*f(x)
{
s2=2*f(x);
cout<<x<<"\t\t\t"<<"2*f(x)= "<<s2<<"\n";
ts2+=s2;
}
else //4*f(x)
{
s4=4*f(x);
cout<<x<<"\t\t\t"<<"4*f(x)= "<<s4<<"\n";
ts4+=s4;
}
x+=h;
}//for
suma = (f(a)+f(b))+(ts2+ts4);
s13=(suma*h)/3;
/*************************************************************************/
getch();
clrscr();
gotoxy(30,1);
cout<<"RESULTADOS \n\n\n";
cout<<" SUMA = "<<suma;
cout<<"\n\n SIMPOSON 1/3 = "<<s13;
cout<<"\n\n\n ¨ Desea evaluar la funcion en otro intervalo (s/n)?: ";
cin>>opc;
}while(opc !='n' && opc!='N');
}//main
//funcion
float f(float x)
{
return pow(x,4);
}
Ojala ,me puedas ayudar
Gracias de antemano
Pues ya como tienes el código corregido no veo el problema, no es necesario declarar el prototipo de la función float f(float x); sino q de una vez puedes poner
float f(float x)
{ return pow(x,4);
} en su lugar, borra el .obj y reconstruye el proyecto con Project->Build All, ya no deberías tener problema alguno.
Gracias por contestar.
pero en donde pongo
float f(float x)
{ return pow(x,4);
}
ya que me manda error.....
Mira lo puse asi:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_CalcularClick(TObject *Sender)
{
int n,i;
float a,b,h,s,s2,s4,x,ts2,ts4,s13,suma;
char opc;
float f(float x);
{
return pow(x,4);
}
a=b=h=s=x=s13=suma=0;
a=StrToFloat(Edt_a->Text);
b=StrToFloat(Edt_b->Text);
n=StrToFloat(Edt_Numero->Text);
do
{
if(n%2 !=0)
ShowMessage("el numero debe ser un numero par");
}while(n%2 !=0);
h=(b-a)/n;
s=f(a)+f(b);
Edt_Fa->Text=FloatToStr(f(a));
Edt_Fb->Text=FloatToStr(f(b));
Edt_h->Text=h;
Edt_s->Text=s;
Edt_x->Text=x;
/****************************SIMPSON 1/3**********************************/
//se evaluan los valor de x donde x=x+h en el intervalo (a,b)
x=a+h;
for(int i=1; i<=n-2; i++)
{
f(x);
x+=h;
}
//segun el metodo simpson 1/3 algunos valores seran 2*f(x) o 4*f(x)
x=a+h;
for(i=1; i<=n-1; i++)
{
if(i%2 == 0) //2*f(x)
{
s2=2*f(x);
ts2+=s2;
}
else //4*f(x)
{
s4=4*f(x);
ts4+=s4;
}
x+=h;
}//for
suma = (f(a)+f(b))+(ts2+ts4);
s13=(suma*h)/3;
/*************************************************************************/
Edt_Suma->Text=FloatToStr(suma);
Edt_S13->Text=FloatToStr(s13);
}
//---------------------------------------------------------------------------
Y me manda el siguiente error:
[C++ Error] Unit1.cpp(35): E2467 '_fastcall TForm1::Btn_CalcularClick(TObject *)' cannot return a value
[C++ Warning] Unit1.cpp(39): W8066 Unreachable code
La función no puedes meterla dentro del evento :confused:, debes colocarla antes q la primera función q la llame, por ejemplo:
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float f(float x);
{ return pow(x,4);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//------------------------------------------------------------------------
void __fastcall TForm1::Btn_CalcularClick(TObject *Sender)
{ int n,i;
float a,b,h,s,s2,s4,x,ts2,ts4,s13,suma;
char opc;
.....
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.