Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Función no existe (Call of nonfunction)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Función no existe (Call of nonfunction) Responder citando

Tengo un formulario en un proyecto en BCB 6 con esto:
Código:
#pragma resource "*.dfm"
TfMenInt *fMenInt;

extern AnsiString cAux, NombreUser;
extern bool lPrueba;
extern int LinEje;
extern TDateTime dFecha;
extern TListItem *pItem;
extern TReplaceFlags oReplace;

extern void ColorForm(TForm *Form);
extern int Mensaje(int Icono, AnsiString Mensaje, AnsiString Botones);

Esa última función Mensaje la uso absolutamente en todos los formularios del proyecto (58 en total) y en todos ellos está declarada exactamente igual como es lógico.

También en todos la uso exactamente de la misma forma; en este formulario la primera vez que la llamo lo he hecho así:
Código:
fPersona->Query->Close();
fPersona->Query->SQL->Text = "INSERT INTO Correo (Remite, Destino, Hora, Asunto, Mensaje, Leido) VALUES (:Remite, :Destino, :Hora, :Asunto, :Mensaje, 0)";
fPersona->Query->ParamByName("Remite")->AsString  = NombreUser;
fPersona->Query->ParamByName("Hora")->AsDateTime  = Now();
fPersona->Query->ParamByName("Asunto")->AsString  = Asunto->Text;
fPersona->Query->ParamByName("Mensaje")->AsString = Mensaje->Text;

if (Usuarios->Visible)
{
     lPrueba = false;
     for (nItem = 0; nItem <Usuarios>Items->Count; nItem ++)
          if (Usuarios->Items->Item[nItem]->Checked)
          {
               lPrueba = true;
               try
               {
                    fPersona->Query->Close();
                    fPersona->Query->ParamByName("Destino")->AsString  = Usuarios->Items->Item[nItem]->SubItems->Strings[0];
                    fPersona->Query->ExecSQL();
                    fPersona->Query->Transaction->Commit();
               }
               catch(...)
               {
                    fPersona->Query->Transaction->Rollback();
               }
          }

     if (!lPrueba)
     {
          Mensaje(3, "No ha seleccionado ningún destinatario.", "Volver");     // <---- AQUÍ DA EL ERROR EL COMPILADOR
          return;
     }
}
Pero a la hora de compilar me está dando un error E2314 Call of nonfunction en esa llamada. Y estoy totalmente perdido sobre los motivos ya que SIEMPRE lo hago igual.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)


Ultima edición por Angel el Mar 09 May, 2017 4:36 pm, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Voy más allá. He probado a compilar el formulario poniendo esa llamada en diversos sitios del código, por si fuera un problema de escritura y no lo hubiera detectado; Ponga donde ponga esa línea me da el mismo error.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola, Angel, creo que el problema puede estar aquí:


fPersona->Query->SQL->Text = "INSERT INTO Correo (Remite, Destino, Hora, Asunto, Mensaje, Leido) VALUES (:Remite, :Destino, :Hora, :Asunto, :Mensaje, 0)";
...
fPersona->Query->ParamByName("
Mensaje")->AsString = Mensaje->Text;

Estas declaraciones anteriores impiden al compilador ver su función con el mismo nombre. Cambie el nombre Mensaje
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Felip escribió:
Hola, Angel, creo que el problema puede estar aquí:


fPersona->Query->SQL->Text = "INSERT INTO Correo (Remite, Destino, Hora, Asunto, Mensaje, Leido) VALUES (:Remite, :Destino, :Hora, :Asunto, :Mensaje, 0)";
...
fPersona->Query->ParamByName("
Mensaje")->AsString = Mensaje->Text;

Estas declaraciones anteriores impiden al compilador ver su función con el mismo nombre. Cambie el nombre Mensaje

Hola Felip y gracias. Esa posibilidad la tuve en consideración y por ello hice la prueba poniendo la llamada en otros sitios diferentes del formulario y siempre me da el mismo error, independientemente de donde haga la llamada.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola Ángel, como bien dice Felip, el error tiene que estar ahí, seguramente tienes un argumento local que tiene el mismo nombre que la función a la que intentas llamar, prueba a cambiar la línea:
Código:
Mensaje(3, "No ha seleccionado ningún destinatario.", "Volver");
por
Código:
::Mensaje(3, "No ha seleccionado ningún destinatario.", "Volver");

Para hacer referencia a la función global ya que sino intentara usar la variable local y de ahí ese mensaje de error.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¡ME DESCUBRO ANTE VOSOTROS!
Efectivamente ese era el problema. Lo que no entiendo es por qué si pongo esa llamada en cualquier otro evento del formulario, por ejemplo en un OnClick, también me da el error aunque no haya nada declarado en dicho evento.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.