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 Error

    Insgesamt 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 🙂


Anmelden zum Antworten