fatal error bei templates:könnt ihr das mal überprüfen?
-
ich weis, sowas macht ihr nich gerne, und mir ist es etwas peinlich, euch mit so ner kleinigkeit zu stören..aber ich glaub, ich fang besser mal von vorne an
also, ich sitze immernoch(bzw wieder) an meiner streamklasse für alles was virtuelle dateien angeht.
sie soll sich funktionell wie die gewöhnlichen stream klassen benutzen lassen, sie hat also auch eine read funktion.hier ist sie:
//position stellt den internen lesezeiger als verschiebung vom dateizeiger da,ist also selber kein pointer template<class T> result Virtualfile::read(T* &buffer,int bytes){ if(position+bytes<size){ anzahl=bytes/sizeof(T); T* pointer=T*(readpointer[position]); for(int i=0;i<anzahl;++i){ buffer[i]=*pointer+i; } position+=bytes; return ok; } return out_of_range; }
bestimmt ist ein dicker hund drin, ich hab ja nen schönen fatal error in zeile 4,der in unregelmäßigen abständen erscheint und der bewirkt, dass der bcb sich weigert den abschnitt überhaupt zu compilieren(er bricht ohne fehlermeldung ab)
[C++ Fatal Error] Virtualfile.cpp(25): F1004 Internal compiler error at 0xc3aa73 with base 0xc10000
-
[C++ Fatal Error] Virtualfile.cpp(25): F1004 Internal compiler error at 0xc3aa73 with base 0xc10000
Hmmm...das kenne ich sehr gut. Bevor du nach Fehlern suchst, bennen die Datei
um, erstelle sie neu und kopiere den Quellcode der umbenannten Datei in die neue
hinein. Wenn das nicht Funktioniert, erstelle ein neues Projekt in welchem du
alle noetigen Dateien hinzufuegst die du benoetigst und erstelle das Projekt
erneut.Ich weiss das hoert sich merkwuerdig an, aber der Borland Kompiler _ist_
merkwuerdig und manchmal hat mir diese Vorgehensweise geholfen. Wenn das den
Fehler nicht behebt, dann weiss ich auch nicht weiter. Wenn du willst, kannst
du mir mal das Projekt zuschicken, hab den BCB auch hier. Evtl. laesst es sich
bei mir uebersetzen.mfg
v R
-
hmm hab nu neues projekt mit den dateien erstellt, krieg nu keinen critical error mehr, aber compilieren tut er den teil immernoch net(das weis ich, weil ich da absichtlich nen return wert ohne ";" hab, da muss er spätestens alarm schlagen^^
dann hab ich zum test mal alle die templates ersetzt, und siehe da, 3 fehlermeldungen...komisch, dass es an den templates lag
hier mal die deklaration(richtiger ausdruck?) in der klasse:
class Virtualfile{ private: void* datapointer; int* readpointer; unsigned long size; int position; char* name; public: bool SetPrivateData(char*); unsigned long get_size(); void* get_pointer(); void FreePrivateData(); template<class T>//<---- bool read(T*&,int); bool operator<<(void*); };
wieso erkennt er die fehler nicht?
//edit kommando zurück, der critical error hat mich grad wieder besucht-.-
-
otze schrieb:
hier mal die deklaration(richtiger ausdruck?) in der klasse:
Nein, Definition!
Sieht aber OK aus.
Welche Version des Borland verwendest du denn?
uU kann der keine Member Templates?
-
ach mist diese dumme nomenklatur^^
ich verwende den bcb 6 personal
mit der zeile hier kommt der bcb absolut nich klar:
int anzahl=bytes/sizeof(T);
-
shit der bcb6 kann das garnich, ich hab aufjedenfall nichts in der hilfe gefunden...
hat jemand ne idee, wie ich nun meine stream klasse für virtuelle dateien(welche sich genauso verhalten soll wie die standard streamklassen)fertigschreiben soll,wenn ich nicht die möglichkeit hab,templates für die schreib/lese operationen zu benutzen?
es soll im endeffekt keinen unterschied machen, ob ich
char Buffer; data.read(Buffer,sizeof(char);
oder
struct x{ ... } x Header; data.read(Header,sizeof(x);
schreib
-
I benutz zwar nicht BC6 sondern BC5.5 aber mit tempaltes kommt sehr oft eine
Internal compiler error at 0xc3aa73 with base 0xc10000
Fehlermeldung. Irgendwo ist auch immer dann ein Fehler im Code (kann weit von der angebenen Zeile weg sein). Was mir oft hilf ist, dass ich den Code einmal durch den djgpp kippe. Der produziert dann recht brauchbare Fehlermeldungen.
wieso erkennt er die fehler nicht?
Der BC compilert zwar Templates ist bei Fehlermeldungen aber ganz einfach lächerlich. Templates werden nur auf Syntaxfehler abgesucht wenn man das Template instanziert. Fals man ein tempalte nicht instanziert kommt man hiermit weg:
template<class T> void foo() { T t; ))))(((((())/ *-*/+ %%% &&& }
Was eigentlich jeden Compiler ans schreien bringen sollte. Also wenn der BC etwas schluck heist das noch lange nicht, dass es richtig ist!
-
djgpp?
-
DJGPP ist ein Windowsport von GCC. Eigentlich ist BC in den meisten Gebieten besser aber beim Debuggen von Templates hat DJGPP die Nase weit vorn. (Wahrscheinlich tut es ein anderer GCC Port auch).
-
Hab auch den BCB 6 hier und der Code geht durch.
mfg
v R