Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Error al mostrar Cadena(AnsiString) desde una función (https://www.clubdelphi.com/foros/showthread.php?t=84633)

darkmir 14-11-2013 22:23:10

Error al mostrar Cadena(AnsiString) desde una función
 
Hola a todos, trato de mostrar una cadena (AnsiString) en un TEdit llamandolo desde otra función, pero me muestra error de conversión, el error es el siguiente:

Código:

[bcc32 Error] Unit1.cpp(26): E2034 Cannot convert 'UnicodeString' to 'TStrings *'
  Full parser context
    Unit1.cpp(25): parsing: void _fastcall TForm1::Button1Click(TObject *)

el código que utilize es :

Código:

void mostrar(TStrings *P)
{
    P->Add("Hola Mundo");
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  mostrar(Edit1->Text);
}

he estado tratando de convertirlo pero no he podido hasta el momento, cambie de TStrings a AnsiString de esta manera:

Código:

void mostrar(AnsiString prueba )
{
    prueba ="Hola Mundo";
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  mostrar(Edit1->Text);
}

no me da errores, pero no me muestra la cadena ("Hola Mundo"), sale en blanco, cualquiera de los 2 metodos que me puedan ayudar, se los agradezco de antemano.

Saludos.

ecfisa 14-11-2013 23:03:00

Hola darkmir.

En el primer código:
Código:

void mostrar(TStrings *P)
{
    P->Add("Hola Mundo");
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  mostrar(Edit1->Text);
}

El parámetro P está declarado de tipo TStrings y le envias un argumento de tipo AnsiString, de allí el error. No sucede lo mismo si envias un argumento del tipo correcto, por ejemplo:

Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 mostrar(ListBox1->Items); // o Memo1->Lines, ...
}

En el segundo código:
Código:

void mostrar(AnsiString prueba )
{
    prueba ="Hola Mundo";
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  mostrar(Edit1->Text);
}

Tenes declarar el parámetro por referencia, ya que lo está por valor y así no se alterará el valor de la varíable enviada como argumento:
Código:

void mostrar(AnsiString &prueba )
{
  prueba = "Hola Mundo";
}

De todos modos no va a funcionar de forma directa con Edit->Text, ya que Text no es la variable en sí sino una propiedad que la referencia, así que tendrías que usarla de este modo:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString s;
  mostrar(s);
  Edit1->Text = s;
}

Si deseas ahorrarte la variable AnsiString (s), una opción es:
Código:

void mostrar(TEdit *ED )
{
  ED->Text = "Hola Mundo";
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  mostrar(Edit1);
}

Saludos :)

darkmir 14-11-2013 23:17:21

Gracias
 
Muchas gracias ecfisa por el código, pero agradesco más por la explicación en ellos. ^\||/


La franja horaria es GMT +2. Ahora son las 06:16:05.

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