stream.read Problem



  • Hi, ich möchte eine Datei einlesen. Dazu habe ich folgenden Code:

    std::vector<wchar_t> data;
        std::basic_ifstream<wchar_t> stream(fileName, std::ios::binary);
    	stream.unsetf(std::ios::skipws);
    	stream.seekg(0, std::ios::end);
    	int size = stream.tellg();
    	stream.seekg(0, std::ios::beg);
    	data.resize(size + 1);
    	stream.read(&data.front(), static_cast<std::streamsize>(size));
    	stream.close();
    	data[size] = 0;
    	data.push_back(L'\0');
    

    Das funktioniert. Jetzt möchte ich aber anstatt dem wchar_t meine eigenen Char-Klasse verwenden:

    std::vector<Char> data;
        std::basic_ifstream<Char> stream(fileName, std::ios::binary);
    	stream.unsetf(std::ios::skipws);
    	stream.seekg(0, std::ios::end);
    	int size = stream.tellg();
    	stream.seekg(0, std::ios::beg);
    	data.resize(size + 1);
    	stream.read(&data.front(), static_cast<std::streamsize>(size));
    	stream.close();
    	data[size] = 0;
    	data.push_back(L'\0');
    

    was zur Folge hat, dass das Programm in der Zeile mit dem "stream.read" abstürzt. Die Char Klasse sieht so aus:

    class Char
    {
    public:
    	Char();
    	Char(const wchar_t& value);
    	operator wchar_t() const;
    };
    

    Woran kann das liegen?


  • Mod

    Dein Char hat überhaupt keinen Inhalt, nur Funktionen. Wo soll da etwas hingeschrieben werden?



  • Doch, habe ich nur vergessen mit rüber zu kopieren:

    protected:
    	wchar_t value;
    

  • Mod

    Dann verheimliche uns bitte nicht alles. Wenn ich alles so ergänze wie ich es für richtig halte und so dass es compiliert, dann funktioniert es bei mir tadellos.



  • Ich will nichts verheimlichen, nur wollte ich das ganze übersichtlich halten.

    Der Rest der Char Klasse schaut so aus:

    Char::Char() :
    	value(L'')
    {
    }
    
    Char::Char(const wchar_t& value) :
    	value(value)
    {
    }
    
    Char::operator wchar_t() const
    {
    	return value;
    }
    

    Also ganz trivial.


Anmelden zum Antworten