Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Definición de una función (https://www.clubdelphi.com/foros/showthread.php?t=93631)

Angel.Matilla 12-12-2018 10:24:07

Definición de una función
 
Tengo declarada una función de la siguiente forma:
Código PHP:

void ColorForm(TForm *Formbool lAuto true)
{
     
DWORD NoStyle BS_LEFT BS_CENTER BS_RIGHT;
     
int nFondonPapelnTintanWidth;
    
TComponent *Source;
     
TSysLocale SL SysLocale;
     [
etc.] 

De forma similar en ese mismo módulo tengo declaradas otras, de forma que tengan un valor por defecto al ser llamada. Sin embargo al compilarlo me está dando este error:
Cita:

E2148 Default argument value redeclared for parameter 'lAuto'
y no entiendo por qué en esa definición me da ese error y no lo hace en otras llamadas similares como esta:
Código PHP:

bool ValidaEmail(String emailStrbool checkTLD true

¿A alguno se os ocurre cuál puede ser la razón de ese error? Gracias

ecfisa 12-12-2018 16:39:06

Hola.

Ese error se produce cuando tenemos una declaración de función como la de este ejemplo:
Código PHP:

#ifndef fooH
#define fooH

void ColorForm(TForm *Formbool lAuto true);

#endif 

Y luego intentamos definirla de este modo,
CPP:
Código PHP:

#include "foo.h"
void ColorForm(TForm *Formbool lAuto true)
... 

Y tal como está documentado aquí, C++ no lo permite.

La definición debería ser:
Código PHP:

void ColorForm(TForm *Formbool lAuto)
... 

Saludos :)

Angel.Matilla 12-12-2018 18:09:17

1 Archivos Adjunto(s)
Gracias por responder ecfisa. Me he perdido un poco en tu respuesta; problemas de base, ya lo sé :(.


Donde está hecha esa definición es un archivo cpp, sin formulario de ningún tipo, desde File > New > Unit y lo que me indicas si no entiendo mal debería ir en el .h del formulario. Por otra parte, la otra línea de código que he puesto (ValidaEmail...) está declarada tal cual. Y de verdad que me pierdo; os adjunto la unidad en cuestión.

ecfisa 12-12-2018 18:50:54

Hola Angel.

Estuve mirando el código y veo que no voy a poder ejecutarlo por no tener muchas de los archivos incluídos.

Pero también ví que la función ColorForm está declarada,
Código PHP:

extern void ColorForm(TForm *Form); 

y definida,
Código PHP:

void ColorForm(TForm *Form

donde no aparece bool lAuto = true como parámetro.

De allí la duda que me surge ¿ Ejecutándo ese código es donde aparece el error que mencionabas antes ?

Saludos :)

Angel.Matilla 12-12-2018 18:55:20

Es que el parámetro tuve que quitarlo para poder compilar. Si te fijas al final de la definición de la función hay un par de líneas:
Código PHP:

if (Form->Name != "fMenu")
     
Form->AutoSize true

con el parámetro lo que trataba de evitar son esas dos líneas.

ecfisa 12-12-2018 21:09:38

Hola.

Hice una prueba con tu código (super ultra reducido :)) que tal vez te sirva de guía.

Funciones.cpp
Código PHP:

#pragma hdrstop

#include "Forms.hpp"

#pragma package(smart_init)

// figura el valor por defecto
extern void ColorForm(TForm *Formbool lAuto true);

//------------------------------------------------------------------------------

// aquí no debe figurar el valor por defecto
void ColorForm(TForm *Formbool lAuto
{
  
Form->Color lAuto clRed clLime;


Unit1.cpp:
Código PHP:

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

__fastcall TForm1::TForm1(TComponentOwner)
  : 
TForm(Owner)
{
}

#include "Funciones.cpp"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
ColorForm(Form1False);  // el form se pinta color verde lima
  
ShowMessage("");
  
ColorForm(Form1);         // el form se pinta color rojo


Aún me queda la duda de por que Funciones.cpp no tiene su archivo de cabecera, pero no hace al problema.

Saludos :)


La franja horaria es GMT +2. Ahora son las 01:45:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi