Ansistring Array als Klassenelement initialisieren



  • Mhh.. ich finde den Fehler nicht ...
    Ich habe jede Datei, die irgendwie mit dem Projekt zu tun hat, durchsucht - nirgends taucht das angegebene Modul, welches falsch oder gar nicht gelinkt wird, in falscher Schreibweise auf. Welche Bewandnis haben denn diese OBJ dateien?

    P.S. Das mit den vektoren klappt ganz nett - wozu brauch man schon dynamische Arrays ? 🙂



  • Floyd schrieb:

    Ähm ja - das dumme ist, ich wusste mal, wie man die Dinger beseitigt, ich glaube, der Linker weiß manchmal nicht mehr, was er denn eigentlich Linken soll, wenn einfach bestimmte Funktionen o.Ä. rausgelöscht werden. Also frage ich nochmal, wie beseitigt man diese Linker fehler ?

    Das ist hochgradig davon abhängig, wie die Modul- und Symbolnamen, die uns nichts sagen sollen, lauten.

    Floyd schrieb:

    Welche Bewandnis haben denn diese OBJ dateien?

    Jede .cpp-Datei deines Projekts wird vom Compiler zu einer .obj-Datei übersetzt, in der sich der noch nicht an fixe Adressen gebundene Code sowie eine Symbol-Import- und Exportliste befinden. Der Linker ist dafür verantwortlich, für jeden Symbolimport einen passenden -export zu finden, allen Code und alle Daten zusammenzufügen und die endgültigen Adressen festzulegen.



  • Ok, kann es sein, dass ich für meine eigens verfassten Klassen Funktionen (inline Funktionen) irgendwas in die Header-Datei schreiben muss ? - Soweit bin ich gekommen. Ich schätze mal, da wo "Anwenderdeklarationen" steht 😉 .

    Ok, soweit: Bevor ich da was kaputt spiele, wie macht man das genau, für eine in einer Klasse x deklarierten methode y ?

    Danke für eure Hilfe ( = Zeit) - aber ich hoffe ich stelle mich nicht zu dämlich (=aufwendig) an. 😉



  • audacia schrieb:

    Das ist hochgradig davon abhängig, wie die Modul- und Symbolnamen, die uns nichts sagen sollen, lauten.

    Ok - also, das eine ist ein Pfad auf meiner Festplatte in Laufwerk C und das andere der Name des Moduls, in dem ich die Klasse geschrieben habe, samt den Methoden, um die es anfangs ging.

    Auffällig war, dass in der Fehlermeldung t_modul_name klein geschrieben war - sowohl das "t" als auch der Name. Eigentlich heißt es ja immer TForm1 und nicht tform1 - aber das nur am Rande, ich weiß nicht, ob das was heißen könnte.



  • nervig - ich finde den Linker Fehler echt nicht - ich hab im Header gesucht und alles durchwühlt, was es an Einstellungen gibt.

    Ok, sagt mir, was ihr an Info's braucht ... ich weiß nicht, wo hier was schief läuft! Ich könnte natürlich auch nen neuen Thread aufmachen...



  • Schicke doch mal die Linker-Fehlermeldungen, und die Header-Datei von Klasse x, wo die Methode y fehlen könnte. Hinweis: Hast Du in der C++-Datei vor Methode y das X:: vorangestellt? Wäre jetzt mein Tip auf dem Lottoschein.



  • Ok, geht klar:

    [Linker Fehler] Unresolved External 'tcas::' referenced from D:\MEINE PROGRAMME\RECHNER_NEU\RECHNER.OBJ.

    Zur Erklärung: Rechner_neu ist der name des Projektes, die Klasse heißt eigentlich TCAS (also großgeschrieben - falls das was heißen könnte).

    Sie besteht aus 2 Units (Rechner.h und CAS.h 🙂 ).
    der Header der Unit 2 (der untere) ist wohl der wichtigere, in Unit 2 wurde die fragliche Methode deklariert.

    Vielen dank für eure Mühe - das kann man in den Foren ja gar nicht genug sagen...

    Header Unit 1:

    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Dialogs.hpp>
    #include <Menus.hpp>
    #include <ComCtrls.hpp>
    //---------------------------------------------------------------------------
    class TRechner : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TEdit *EdInput;
            TButton *ButResult;
            TGroupBox *GroupBox1;
            TOpenDialog *OpenDialog1;
            TSaveDialog *SaveDialog1;
            TGroupBox *GroupBox2;
            TMemo *MemoResults;
            TGroupBox *GroupBox3;
            TMainMenu *MainMenu1;
            TMenuItem *Savetofile1;
            TMenuItem *Exit1;
            TMenuItem *Datei1;
            TLabel *Label1;
            TButton *ButAdd;
            TButton *ButSubtract;
            TButton *ButMultiply;
            TButton *ButDivide;
            TButton *ButDel;
            TButton *ButQSum;
            TButton *ButFibo;
            TButton *ButGoldSec;
            TButton *ButPythagoras;
            TButton *ButSqareSum;
            TButton *ButGoldbach;
            TMenuItem *Info1;
            TMenuItem *Bearbeiten;
            TMenuItem *Rckgngig1;
            TButton *Butpi;
            TButton *ButBinary;
            TButton *ButCAS;
            void __fastcall Exit1Click(TObject *Sender);
            void __fastcall ButAddClick(TObject *Sender);
            void __fastcall ButResultClick(TObject *Sender);
            void __fastcall ButSubtractClick(TObject *Sender);
            void __fastcall ButMultiplyClick(TObject *Sender);
            void __fastcall ButDivideClick(TObject *Sender);
            void __fastcall ButDelClick(TObject *Sender);
            void __fastcall ButQSumClick(TObject *Sender);
            void __fastcall EdInputKeyPress(TObject *Sender, char &Key);
            void __fastcall ButFiboClick(TObject *Sender);
            void __fastcall ButGoldSecClick(TObject *Sender);
            void __fastcall ButPythagorasClick(TObject *Sender);
            void __fastcall Savetofile1Click(TObject *Sender);
            void __fastcall Info1Click(TObject *Sender);
            void __fastcall ButGoldbachClick(TObject *Sender);
            void __fastcall Rckgngig1Click(TObject *Sender);
            void __fastcall ButpiClick(TObject *Sender);
            void __fastcall ButBinaryClick(TObject *Sender);
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall ButCASClick(TObject *Sender);
            //void __fastcall FormKeyPress(TObject *Sender, char &Key); 
           //auskommentiert
    private:	// Anwenderdeklarationen
    public:		// Anwenderdeklarationen
            __fastcall TRechner(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TRechner *Rechner;
    //---------------------------------------------------------------------------
    #endif
    

    Header Uni2 (CAS) :

    //---------------------------------------------------------------------------
    #ifndef Unit2H
    #define Unit2H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    
    //---------------------------------------------------------------------------
    class TCAS : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TRichEdit *RiEdCAS;
            TGroupBox *GrBEd;
            TButton *ButExe;
            TButton *ButDel;
    private:	// Anwenderdeklarationen
    
    public:		// Anwenderdeklarationen
            __fastcall TCAS(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TCAS *CAS;
    //---------------------------------------------------------------------------
    #endif
    


  • witte schrieb:

    Schicke doch mal die Linker-Fehlermeldungen, und die Header-Datei von Klasse x, wo die Methode y fehlen könnte. Hinweis: Hast Du in der C++-Datei vor Methode y das X:: vorangestellt? Wäre jetzt mein Tip auf dem Lottoschein.

    Nein - der Hinweis von mir war Quatsch - ich nehme an, das muss man nur, wenn man Methoden für die vom Builder erstellte Klasse (hier TCAS) schreibt - das habe ich aber nicht, ich habe auf TCAS selbst Klassen geschrieben - hoffentlich ist "auf" hier die richtige Präposition ...



  • Im BCB6 gibt es unter Projekt->Optionen->Erweiterter Linker die Option "Linken ohne Groß/Kleinschreibung". Hast Du dort rumgespielt?



  • mhh.. im BCB 4 habe ich das noch nicht gesehen ...rumgespielt habe ich leider daher auch nicht damit 😕


Anmelden zum Antworten