![]() |
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 |
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....... |
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): Código:
float f(float x) Saludos... |
no funciona la declaracion
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
Código:
float f(float x); Código:
float f(float x) |
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:
Código:
#include <vcl.h> |
La franja horaria es GMT +2. Ahora son las 05:11:28. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi