C a C++ > Obecné

UnicodeString.sprintf(...) - nepochopitelné chování

(1/1)

hlucheucho:
Ahoj

když udělám:
--- Kód: ---UnicodeString us;
float val;
TStringGrid *Tabulka;

us.sprintf(L"%e", val);
Tabulka->Cells[j] [i] = us;

--- Konec kódu ---
vše funguje normálně. K mému překvapení

--- Kód: ---float val;
TStringGrid *Tabulka;

Tabulka->Cells[j] [i].sprintf(L"%e", val);

--- Konec kódu ---
nefunguje, buňka je prázdná. Proč?

C++ Builder XE5

hu

zdenek:
Podle mne se v první případě volá Set.... na property a v druhém případěn se volá Get... které vrátí kopii stringu (a ne odkaz na něj uvnitř gridu) a ty pak měníš obsah jen dočasné proměnné, která se pak zahodí.

Tento kód z delphi je obdobný (omlouvám se za pascal, v c dělám jen ve VS):


--- Kód: ---type
 TTest=class
  private
    FMujText: string;
    procedure SetMujText(const Value: string);
    function GetMujText: string;
 public
  property MujText:string read GetMujText write SetMujText;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var TT:TTest;
begin
 TT:=TTest.Create;
 TT.MujText.Create('A',10); //AAAAAAAAAA
 BUtton1.Caption:=TT.MujText; // MujText je stále prázdný a je to správně
 TT.Free;
end;

{ TTest }

function TTest.GetMujText: string;
begin
 result:=FMujText;
end;

procedure TTest.SetMujText(const Value: string);
begin
  FMujText := Value;
end;

end.

--- Konec kódu ---

hlucheucho:
Takže metodu sprintf má buňka stringgridu pro kočku. Použil jsem
--- Kód: ---Tabulka->Cells[j] [i] = FloatToStrF(val, ffExponent, 4, 2);
--- Konec kódu ---
V dokumentaci jsou chybně uvedeny konstanty jako sffEponent, sffGeneral... Nezbývá, než zase konstatovat: úroveň dokumentace sráží kvalitu produktu.

hu

zdenek:
Nápověda není vždy úplně ok, ale tohle je obecná vlastnost property. Je to trochu matoucí, především, když je typem u property nějaký objekt/record co poskytuje metody.

Navigace

[0] Seznam témat

Přejít na plnou verzi