FormatFloat und Dezimalpunkt warum geht das bei mir nicht?



  • Hallo,
    ich wollte das Beispiel aus der FAQ ausprobieren,
    aber leider will es bei mir nicht laufen.

    Was mache ich falsch?

    #include <sysutils.hpp> 
    
     DecimalSeparator = '.';      //   hier kommt die Fehlermeldung    [bcc32 Fehler] Unit1.cpp(13): E2303 Typname erwartet
    
     Application->UpdateFormatSettings = false;
    

    viele grüße Karl



  • Die beiden letzten Zeilen müssen selbstverständlich in eine Funktion rein, am besten in die WinMain (in deiner <project>.cpp) oder main (bei einem Konsolenprogramm).



  • Hallo,

    meinst Du so?
    geht bei mir nicht.

    #pragma hdrstop
    #pragma argsused
    
    #ifdef _WIN32
    #include <tchar.h>
    
    #include <iostream.h>
    #include <sysutils.hpp>
    #else
      typedef char _TCHAR;
      #define _tmain main
    #endif
    
    #include <stdio.h>
    
     int _tmain(int argc, _TCHAR* argv[]) 
    {
    float a=1.2345;
    
    DecimalSeparator = '.';    //[bcc32 Fehler] punkt.cpp(21): E2451 Undefiniertes Symbol 'DecimalSeparator'
    
    cout << a;
    
    return 0;
    }
    

    wo ist mein Denkfehler, ich komm nicht drauf.

    viele Grüße Karl



  • Ist das Symbol _WIN32 definiert? Nur dann wird nämlich SysUtils.hpp inkludiert, in dem DecimalSeparator definiert ist.

    Außerdem:
    iostream.h und stdio.h sind C-Header, in C++ benutzt man iostream und cstdio (ohne .h).



  • Hallo,

    ich komm nicht weiter,

    #pragma hdrstop
    #pragma argsused
    
    #ifdef _WIN32
    #include <tchar.h>
    
    #else
      typedef char _TCHAR;
      #define _tmain main
    #endif
    
    #include <cstdio>
    #include <iostream>
    #include <sysutils.hpp>
    
    using namespace std;
     int _tmain(int argc, _TCHAR* argv[])
    {
    float a=1.2345;
    
    DecimalSeparator = '.';    //[bcc32 Fehler] punkt.cpp(21): E2451 Undefiniertes Symbol 'DecimalSeparator'
    
    cout << a;
    
    return 0;
    }
    

    in der Hilfe hab ich folgendes gefunden:

    Globale Variablen
    Veraltete globale Variablen wurden entfernt; verwenden Sie stattdessen FormatSettings

    Zwanzig globale Variablen aus System.SysUtils, die seit einigen Jahre veraltet waren,
    wurden nun aus dem Produkt entfernt. Diese globalen Variablen betreffen in der Regel Datums-,
    Uhrzeit- und Währungsformate (CurrencyString, LongTimeFormat, ShortMonthNames usw.).

    Instanzen dieser globalen Variablen in Ihrem Code führen jetzt zu folgendem Compiler-Fehler:

    E2451 Undefiniertes Symbol 'bezeichner' (C++)
    E2003 Undeklarierter Bezeichner: '%s' (Delphi)
    Es gibt zwei Lösungen für dieses Problem:

    Verwenden Sie die entsprechenden Felder der globalen Variable System.SysUtils.FormatSettings.
    Wenn Sie in Ihrem Code beispielsweise System.SysUtils.NegCurrFormat verwendet haben, können
    Sie dies durch Folgendes ersetzen:

    FormatSettings.NegCurrFormat

    Erstellen Sie eine eigene TFormatSettings-Struktur, und rufen Sie die überladenen Funktionen
    auf, die diese Struktur übernehmen

    Liegt hier irgendwo mein Fehler, und könnt ihr mir weiterhelfen?

    vielen Dank

    Karl



  • versuchs mal damit:

    FormatSettings.DecimalSeparator =



  • j.halder schrieb:

    versuchs mal damit:

    FormatSettings.DecimalSeparator =

    Hallo,

    geht auch nicht: [ilink32 Fehler] Error: Nicht auflösbares externes 'System::Sysutils::FormatSettings' referenziert von C:....\PUNKT.OBJ

    viele Grße karl



  • Na immerhin kompiliert es schon mal. 🙂
    Du hast vermutlich ein "nacktes" Konsolen-Projekt erstellt, verwendest darin jetzt aber VCL-Klassen. Deswegen stolpert der der Linker nun über nicht eingebundene VCL-Bibliotheken.
    Falls du wirklich mit der VCL arbeiten willst erstellst du dein Projekt am besten neu und achtest dabei darauf, die "Zielframework"-Option entsprechend zu setzen.
    Wenn es ohne VCL sein soll dann dürfte die Win32-Funktion SetLocaleInfo weiterhelfen.
    Hier ein Delphi-Beispiel: http://www.greatis.com/delphicb/tips/lib/system-setseparator.html



  • Jansen schrieb:

    Na immerhin kompiliert es schon mal. 🙂
    Du hast vermutlich ein "nacktes" Konsolen-Projekt erstellt, verwendest darin jetzt aber VCL-Klassen.

    Hallo,

    zu Testzwecken hatte ich ein Konsolen Projekt erstellt.
    Bei meiner VCL Anwendung läuft es jetzt auch mit FormatSettings.DecimalSeparator =

    hab den Tipp inzwischen auch im Forum gefunden. Nur eben nicht ein der FAQ.

    vielen Dank für eure Hilfe

    viele Grüße Karl


Log in to reply