Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
//--------------------------------------------------------------------------- #ifndef FileH #define FileH class CFile { public: //Funktionen CFile() {m_pFile = NULL;} CFile(FILE *pFile) {m_pFile = pFile;} ~CFile() {m_pFile = NULL;} CFile operator= (FILE *pFile) {m_pFile = pFile; return *this;} void write(AnsiString const &rsString); template <class T> void write(T const &rValue); template <class T> void write(list<T> const &rList); void read(AnsiString *psString); template <class T> void read(T *pValue); template <class T> void read(list<T> *pList); //Exception-Classes class xFileError { protected: const type_info *m_pType_Info; public: xFileError() : m_pType_Info(NULL) {} const char* DataType() { if(m_pType_Info) return m_pType_Info->name(); else return "Unbekannter Datentyp"; } }; class xWriteError : public xFileError { public: xWriteError() {m_pType_Info = NULL;} xWriteError(type_info &rType_Info) {m_pType_Info = &rType_Info;} }; class xWriteErrorString : public xWriteError { public: xWriteErrorString() {m_pType_Info = &typeid(AnsiString);} }; class xWriteErrorList : public xWriteError { public: template <class T> xWriteErrorList() {m_pType_Info = &typeid(list<T>);} }; class xReadError : public xFileError { public: xReadError() {m_pType_Info = NULL;} xReadError(type_info &rType_Info) {m_pType_Info = &rType_Info;} }; class xReadErrorString : public xReadError { public: xReadErrorString() {m_pType_Info = &typeid(AnsiString);} }; class xReadErrorList : public xReadError { public: template <class T> xReadErrorList() {m_pType_Info = &typeid(list<T>);} }; private: //Zeiger auf eine Datei, auf die sich die write()- und read()-Funktionen beziehen FILE *m_pFile; //interne Funktion zum Überprüfen, ob m_pFile ein gültiger Zeiger ist void check() {assert(m_pFile);} }; //--------------------------------------------------------------------------- #endif |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
template <class T> void CFile::write(T const &rValue) { check(); if(!fwrite(&rValue, sizeof(T), 1, m_pFile)) throw xWriteError(typeid(T)); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Result CProject::WriteHeaderChunk() { CFile File(m_pProjectFile); SChunkHeader tmpChunkHeader; tmpChunkHeader.Type = CT_HEADER_CHUNK; tmpChunkHeader.iSize = 0; try { File.write(tmpChunkHeader); File.write(m_HeaderChunk.iFileFormatVersion); File.write(m_HeaderChunk.iNumChunks); File.write(m_HeaderChunk.iYear); File.write(m_HeaderChunk.iTrackNumber); File.write(m_HeaderChunk.sProjectName); File.write(m_HeaderChunk.sTitle); File.write(m_HeaderChunk.sSubTitle); File.write(m_HeaderChunk.sAlbum); File.write(m_HeaderChunk.sInterpreters); File.write(m_HeaderChunk.sGenre); File.write(m_HeaderChunk.sCopyright); File.write(m_HeaderChunk.sComments); } catch(CFile::xWriteError &E) { char acTmp[256]; sprintf(acTmp, "Exception xWriteError occurred:\nFehler beim Schreiben von \"%s\" in die Datei", E.DataType()); return err(AnsiString(acTmp), __FILE__, __LINE__, ERR_FAILED, SDIAppForm->Handle); } catch(...) { return err("Exception ... occurred:\nUnbekannte Ausnahme", __FILE__, __LINE__, ERR_FAILED, SDIAppForm->Handle); } return ERR_OK; } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
[Linker Fehler] Error: Ungelöste externe 'void CFile::write<SChunkHeader>(const SChunkHeader&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<int>(const int&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<ECombineOperator>(const ECombineOperator&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<EChannels>(const EChannels&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<char>(const char&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<SInstrDefaultParams>(const SInstrDefaultParams&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<bool>(const bool&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<float>(const float&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<EParamMode>(const EParamMode&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ [Linker Fehler] Error: Ungelöste externe 'void CFile::write<float>(const std::list<float, std::allocator<float> >&)' referenziert von C:\BORLAND-PROJEKTE\MUSIC MAKER\PROJECT.OBJ |
Ihr seid die Besten. Es hat funktioniert. Aber warum der Compiler meckert wenn Templates in .cpp-Dateien stehen ist mir unklar...
Werbeanzeige