Codeguard und Dateioperationen



  • Hallo,
    nachdem ich im C++ - Forum wahrscheinlich falsch war, plaziere ich meine Frage nochmal hier.

    Der auf das wesentliche reduzierte Code einer Klasse zum schreiben eines Logfiles:

    #ifndef LogFileH
    #define LogFileH
    
    #include <string>
    #include <fstream>
    
    class TLog {
        private:
            std::fstream logfile;
    
        public:
            __fastcall TLog(std::string const &filename);
            __fastcall ~TLog();
            void Write(std::string const val);
            void Read();
    };
    
    #endif
    

    und die zugehörige .cpp-Datei:

    #include "LogFile.h"
    
    TLog *Log;
    
    // ---------------------------------------------------------------------------
    
    __fastcall TLog::TLog(std::string const &filename) {
        logfile.open(filename.c_str(), std::ios::out|std::ios::in|std::ios::app);
        return;
    }
    // ---------------------------------------------------------------------------
    
    __fastcall TLog::~TLog() {
        logfile.close();
        return;
    }
    // ---------------------------------------------------------------------------
    
    void TLog::Write(std::string const val) {
        if(logfile.is_open()) {
            logfile << val << std::endl;
        }
        return;
    }
    // ---------------------------------------------------------------------------
    
    void TLog::Read() {
        return;
    }
    // ---------------------------------------------------------------------------
    

    der Aufruf im Konstruktor einer Form:

    TLog *MyLog;
        MyLog = new TLog("c:\\temp\\wk_log.txt");
    ...
    ...
    ...
    

    beim Schreiben eines Strings in die Datei

    MyLog->Write("yyyy");
    

    generiert der Codeguard folgenden Fehler:

    Fehler 00001. 0x310000 (Thread 0x0C94):
    Falscher Parameter: Falsches Datei- oder Pipe-Stream (0xB53C84) wurde an die
    Funktion weitergegeben.
    fputs(0x0013F1EC ["yyyy"], 0x00B53C84)

    ich glaube, das der Fehler mit mit dem Stringformat zusammenhängt, aber ich weiß nicht was hier Abhilfe schafft.

    In den Projektoptionen ist eingestellt:

    _TCHAR entspricht wchar_t

    Ich hoffe, mir kann hier jemand helfen.

    Gruß Udo



  • Wenn das Basisdatentyp wchar_t solltest du String Literalen ein L voranstellen, z.b. L"yyyy".



  • Wenn ich das L voranstelle, dann bringt der Compiler den Fehler

    E2034 Konvertierung von 'const wchar_t*' nach 'string' nicht möglich


Anmelden zum Antworten