Interner Compiler Fehler
-
Hallo miteinander,
ich hab beim BCB4 einen seltsamen Effekt, den ich nicht so ganz nachvollziehen kann. Und zwar hab ich eine Klasse geschrieben, Sourcecode (gekürzt) folgt:
//Header //--------------------------------------------------------------------------- #ifndef _fkH #define _fkH #include <string> #include <vector> #include <set> using namespace std; //--------------------------------------------------------------------------- typedef VOID (*PF__fkCALLBACK)(BYTE, BYTE, PCHAR); //--------------------------------------------------------------------------- class T_fk { private: bool blExtSession; int iExtCount; vector<string> vsExt; string sDir; PF__fkCALLBACK pfCallback; public: __fastcall T_fk(); __fastcall ~T_fk(); bool SetCallback(PF__fkCALLBACK pfCallback); bool __fastcall InitExtAdd(); bool __fastcall AddExtFromFile(char *pszFileName); bool __fastcall AddExt(char *pszExtension); int __fastcall CloseExtAdd(); }; //--------------------------------------------------------------------------- #endif
//Unit //--------------------------------------------------------------------------- #pragma hdrstop #include "_fk.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // CTor&DTor //--------------------------------------------------------------------------- __fastcall T_fk::T_fk() { blExtSession = false; } //--------------------------------------------------------------------------- __fastcall T_fk::~T_fk() { vsExt.clear(); } //--------------------------------------------------------------------------- // Öffentliche Methoden //--------------------------------------------------------------------------- bool __fastcall T_fk::InitExtAdd() { if(blExtSession) return false; blExtSession = true; vsExt.clear(); iExtCount = 0; return true; } //--------------------------------------------------------------------------- bool __fastcall T_fk::AddExtFromFile(char *pszFileName) { if(!blExtSession) return false; string sFileName = pszFileName; int iPos = sFileName.find_last_of('.', 0); if(iPos == 0) return false; string sExt; sExt.assign(sFileName, iPos, sFileName.size() - iPos); vsExt.push_back(sExt); return true; } //--------------------------------------------------------------------------- bool __fastcall T_fk::AddExt(char *pszExtension) { //... return true; } //--------------------------------------------------------------------------- int __fastcall T_fk::CloseExtAdd() { //... blExtSession = false; return vsExt.size(); } //---------------------------------------------------------------------------
Die Unit läßt sich problemlos compilieren. Include ich jetzt jedoch die Header-Datei z.B. in ein Formular, erhalte ich beim Compilieren den Fehler "[C++ Fataler Fehler] algorith.h(1622): F1004 Interner Compiler-Fehler at 0x12868ed with base 0x1200000.". Da ich mal davon ausgehe, daß die Standard-Includes fehlerfrei sind, muß der Fehler wohl bei mir liegen (oder evtl. ne Schwachstelle bei BCB).
Hat jemand schonmal so einen Effekt gehabt oder kann mir weiterhelfen....
-
Hallo,
Entferne mal using namespace std; aus dem Header. So wie du es machst bindest du ja alle Quelltextfiles in die du deinen Header inkludierst in den Namensraum std ein.
Schreib statt dessen im Header vor die Typen, die es benötigen std:: davor.Ciao
-
Hi,
in welchem Ordner hat du den BCB installiert?MfG
Alexander Sulfrian
-
@Braunstein: Das hat leider nichts gebracht.
@Alexander: D:\Code\Borland\CBuilder4
-
Du musst die beiden Updates installieren.
Mit Google hättest du das gefunden:
http://info.borland.com/devsupport/bcppbuilder/patches/bcpp4/english/UPD2RDME.TXT
-
Irgendwann scheint dieser Fehler jeden heimzusuchen
Da ich BCB6 Enterprise mit SP4 verwende, kam die Lösung mit dem Patch für
mich nicht in Frage.
Durch Herumprobieren habe ich herausgefunden, daß die Fehlermeldung nicht
kommt, wenn ich bei den Compiler-Optionen die Warnungen ausschalte. Indem
ich Warnungen selbst ausgewählt habe, kam ich auf die Warnung, die das Problem
ausgelöst hat:W8032 Temporäre Größe für Parameter 'zahl' in Aufruf von 'funktion' verwendet
Ursache für die Warnung (die aber wahrscheinlich für den Fehler nebensächlich
ist) war eine Set-Funktion einer AnsiString-Property, in der als Parameter
AnsiString& verwendet wurde. Beim Zuweisen eines AnsiString.Trim() (also
const), wollte der Compiler wohl die Warnung (zu Recht) ausgeben und dabei
gab's dann den Fehler.Vielleicht hilft das ja irgendjemanden irgendwann mal weiter...
Gruß,
Alexander
-
@Braunstein: Was soll den der Quatsch jetzt? Was soll using namespace std; damit zu tun haben?
-junix
-
junix schrieb:
Was soll den der Quatsch jetzt? Was soll using namespace std; damit zu tun haben?
Naja, ich bin mir nicht so sicher, ob das jetzt Quatsch ist. Ich habe mir ja
auch die Postings, die sich hier zum Thema inzwischen angehäuft haben, durch-
gelesen und vor allem auch mal in QualityCentral danach gesucht. Dort gibt es
eine Fehlermeldung, die meiner Ansicht nach durchaus in die Richtung geht:Report #: 1629
'using std::make_pair' provokes F1004 Internal Compiler ErrorInsgesamt habe ich dort sechs verschiedene Einträge zum Thema F1004 gefunden
(unter Delphi-BCB/Compiler/C++), die recht unterschiedlich aussehen. Was das
genaue Problem ist, weiß wahrscheinlich bisher keiner.Gruß,
Alexander
-
Jo, erstmal danke für eure Mühen... Es lag weder am namespace, noch an fehlenden Updates, trat so und so auf.
Alexander Kempf schrieb:
Was das genaue Problem ist, weiß wahrscheinlich bisher keiner.
So seh ich das inzwischen auch
Der Fehler war irgendwann genauso plötzlich verschwunden, wie er aufgetaucht war. Dabei habe ich an der Klasse nichts wesentliches geändert. Kann man sich nur wundern