RAD Studio 10: Unresolved externals mit static member



  • Hallo,

    ich habe hier ein Problem mit dem Linker, der behauptet, unresolved externals zu finden. In einem von TFrame abgeleiteten Frame habe ich mehrere Konstanten definiert:

    class TFrameDevices : public TFrame
    {
    __published:	// IDE-verwaltete Komponenten
       TStringGrid *Grid;
       ...
    
    private:
       static const unsigned int COL_ID      = 0;
       static const unsigned int COL_NAME    = 1;
       static const unsigned int COL_ADDRESS = 2;
       static const unsigned int COL_STATE   = 3;
       static const unsigned int COL_COMMENT = 4;
       ...
    };
    

    Im Konstruktor benutze ich diese Konstanten als Index für die Spalte eines TStringGrids .

    __fastcall TFrameDevices::TFrameDevices( TComponent* Owner ) : TFrame( Owner )
    {
       Grid->ColCount	= 5;
       Grid->RowCount	= 1;
    
       Grid->ColWidths[COL_ID]	= 72;
       Grid->ColWidths[COL_NAME]	= 128;
       Grid->ColWidths[COL_ADDRESS]	= 96;
       Grid->ColWidths[COL_STATE]	= 80;
       Grid->ColWidths[COL_COMMENT]	= 448;
    }
    

    Der Compiler läuft drüber, aber der Linker nicht:

    ilinke32.exe schrieb:

    [ilink32 Error] Error: Unresolved external 'TFrameDevices::COL_NAME' referenced from E:\SOURCE\FNCT\OBJ32\FRAMEDEVICES.OBJ
    [ilink32 Error] Error: Unresolved external 'TFrameDevices::COL_ADDRESS' referenced from E:\SOURCE\FNCT\OBJ32\FRAMEDEVICES.OBJ
    [ilink32 Error] Error: Unresolved external 'TFrameDevices::COL_COMMENT' referenced from E:\SOURCE\FNCT\OBJ32\FRAMEDEVICES.OBJ
    [ilink32 Error] Error: Unresolved external 'TFrameDevices::COL_STATE' referenced from E:\SOURCE\FNCT\OBJ32\FRAMEDEVICES.OBJ
    [ilink32 Error] Error: Unresolved external 'TFrameDevices::COL_ID' referenced from E:\SOURCE\FNCT\OBJ32\FRAMEDEVICES.OBJ

    In der Befehlszeile für den Linker taucht die passende .obj Datei auf, die Pfade stimmen auch.
    Wenn ich in der FrameDevices.cpp Datei folgende Zeilen ergänze läuft der Linker durch:

    const unsigned int TFrameDevices::COL;
    const unsigned int TFrameDevices::COL_NAME;
    const unsigned int TFrameDevices::COL_ADDRESS;
    const unsigned int TFrameDevices::COL_STATE;
    const unsigned int TFrameDevices::COL_COMMENT;
    

    Ich habe ein kleines Spielprojekt gebastelt, um den Fehler zu reproduzieren, aber das läuft durch. Diesen Fall gibt es drei Mal in meinem Projekt, jeweils in einer TFrame Klasse. Ich bin ratlos. Hat jemand sowas auch schon mal gehabt? Oder eine Idee, wie man das fixen kann?


Anmelden zum Antworten