Datumsproblem



  • Hallo Leutz ich habe wirklich ein simples Programm geschrieben, aber das geht nicht. Hier ist mal der komplette Quellcode:

    #pragma hdrstop
    #include <iostream>
    #include <conio>
    #include <SysUtils.hpp>
    using namespace std;
    //---------------------------------------------------------------------------
    
    #pragma argsused
    void main()
    {
            cout << Date << endl;
            getch();
    }
    

    Das soll ein Konsolenprogramm werden. Beim Compilieren bekomme ich auch keine Fehler, aber wenn ich es ausführen will, bekomme ich einen Linker-Fehler. Der sieht wie folgt aus:

    [Linker Fehler] Unresolved external '__fastcall Sysutils::Date()' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\ALL USERS\DESKTOP\PRO\PROJEKT-DAT\BACKUP\BACKUP.OBJ
    

    Warum bekomme ich diesen Fehler???

    MfG
    Muecke



  • Hast du es mal mit

    Date()
    

    versucht?



  • ja scheint er wohl:

    Muecke schrieb:

    [Linker Fehler] Unresolved external '__fastcall [b]Sysutils::Date()[/b]' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\ALL USERS\DESKTOP\PRO\PROJEKT-DAT\BACKUP\BACKUP.OBJ
    

    bin mir nur nich sicher ob man Date()n einfach so ausgeben kann.... 😕



  • Im Code steht Date ohne () !!!
    Wenn nicht, dann halt

    DateToString(Date());
    

    . Auf jeden Fall fehlen die Klammern. PS: Noch mal nachgeschaut: Die BCB-Hilfe scheint da einen Fehler zu haben - im Beispiel wir auch nur Date ohne Klammern geschrieben. (Ich hasse die BCB-Hilfe).



  • vielleicht hat ers nur hier im code vergessen!

    Also bei mir in hilfe steht es irgendwie mit klammern!

    nit
    
    SysUtils
    
    Kategorie
    
    Datum und Uhrzeit
    
    extern PACKAGE System::TDateTime__fastcall Date[b](void)[/b];
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    
    {
      Label1->Caption = DateToStr(Date[b]()[/b]);
    }
    


  • ???? Also ich schwöre, dass bei meiner Version (6 Pro) im Beispiel

    procedure TForm1.Button1Click(Sender: TObject)
    begin
      Label1.Caption := 'Heute ist der ' + DateToStr(Date);
    end
    

    steht.



  • OK. Das mit den Klammern stimmt.
    Stoße jetzt aber auf mein nächstes Problem.

    Ich möchte mit der Funktion "system()" arbeiten und möchte den "command" vorher in einer Variable speichern.
    Mein Quellcode sieht wie folgt aus:

    AnsiString datum;
            char *cdatum, *command;
    
            command = (char*)malloc(100 * sizeof(char));
            cdatum = (char*)malloc(10 * sizeof(char));
    
            datum = DateToStr(Date());
            cdatum = datum.c_str();
    
            CreateDir("D:\\Backup");
            CreateDir("D:\\Backup\\" + datum);
    
            command = "copy C:\\lagerverwaltung.mdb D:\\Backup\\" + *cdatum;
            cout << command;
            getch();
    //        system(command);
    }
    

    Aber wenn ich mir die Variable command ausgeben lasse, steht dort nichts drin. Warum?

    MfG
    Muecke



  • Hallo

    die Zusammenstellung des Strings solltes du mit strcat() machen, wenn du nicht AnsiString oder string benutzen willst

    bis bald
    akari



  • OK.

    Danke für die superschnelle Hilfe...



  • Hallo,

    Bitte Muecke, lies dir ein C++-Tutorial durch. Dein Code steckt so voller Fehler, dass man garnicht weiß wo man anfangen soll. Ich kommentiere mal ein paar.

    AnsiString datum;
            char *cdatum, *command;
    
            command = (char*)malloc(100 * sizeof(char)); // Warum malloc und nicht new
    
            cdatum = (char*)malloc(10 * sizeof(char)); // das Gleiche
    
            datum = DateToStr(Date());
            cdatum = datum.c_str(); // Hier überschreibst du deinen vorher erzeugten Pointer und erzeugst ein Speicherleck
    
            CreateDir("D:\\Backup");
            CreateDir("D:\\Backup\\" + datum);
    // Hier kommt das zweite Speicherleck, warum dereferenzierst du den Pointer
    // man kann so nicht einfach chararrays addieren dazu strcat (siehe akaris Post)
            command = "copy C:\\lagerverwaltung.mdb D:\\Backup\\" + *cdatum; 
            cout << command;
            getch();
    //        system(command);
    // Wo wird der oben allozierte Speicherplatz freigegeben
    }
    

    Bitt verwende lieber ausschliesslich AnsiStrings und keine chararrays, da du offensichtlich nicht weißt wie man mit denen umgeht.

    Ciao


Anmelden zum Antworten