Undefiniertes Symbol "TStringGrid"



  • Hallo,

    hab ne Klasse geschrieben die auch funktioniert. Nun wollte ich es aufteilen, in eine header-Datei und in ne Cpp-Datei. Ab da klappts nicht mehr und ich finde den Grund nicht. Es kommt ne Fehlermeldung: Undefiniertes Symbol "TStringGrid".

    Main-Datei

    CreateArray CreateArrayData;
        CreateArrayData.CreateArrayFromFile();
        CreateArrayData.WriteCreatedArrayInToGrid(Trainer->SelektierenView)
    

    HeaderDatei

    #include <vcl.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    class CreateArray
    {
        // Deklaration
        private:
        DynamicArray <AnsiString> Data1,Data2,Data3,Data4;
        AnsiString FileName;
        int Number;
    
        //  Methoden
        public:
        void CreateArrayFromFile ();
        void WriteCreatedArrayInToGrid (TStringGrid);
    };
    

    Cpp-Datei

    #include <vcl.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #include "CreateArray.h"
    
    void CreateArray::CreateArrayFromFile ()
    {
        char GetLine[200];
        FILE *DataFile;
        AnsiString GotLine, Entry;
    
        Number = 0;
        DataFile = fopen("DataFile.txt","r");
        do
        {
             fread (GetLine,200,1,DataFile);
             GotLine = AnsiString(GetLine);
             Number++;
    
             Data1.Length  = Number+1;
             Data2.Length  = Number+1;
             Data3.Length  = Number+1;
             Data4.Length  = Number+1;
    
             Data1[Number] = Trim(GotLine.SubString(1,5));
             Data2[Number] = Trim(GotLine.SubString(6,80));
             Data3[Number] = Trim(GotLine.SubString(86,80));
             Data4[Number] = Trim(GotLine.SubString(166,35));
    
        }while(feof(DataFile) == 0);
        fclose (DataFile);
    }
    
    void CreateArray::WriteCreatedArrayInToGrid (TStringGrid *Grid) // Hier Fehler 
    {
        for (int i=1; i<=Number; i++)
        {
             Grid->Cells[0][i] = Data1[i];
             Grid->Cells[1][i] = Data2[i];
             Grid->Cells[2][i] = Data3[i];
             Grid->Cells[3][i] = Data4[i];
        }
    }
    

    Die Fehlermeldung erscheint in der CPP Datei (ein paar Zeilen weiter oben von hier). Hoffe mir kann jemand helfen. Danke



  • In der H-Datei steht:

    void WriteCreatedArrayInToGrid (TStringGrid)
    

    Hier liegt der Fehler. Du übergibst ein Klassenobjekt und nicht den Zeiger darauf.

    void WriteCreatedArrayInToGrid (TStringGrid *Grid)
    

    😉



  • Das hab ich auch zuerst Gedacht, ich muss dem ja sagen dass es sich um einen Pointer handelt. Dann hat er mir aber die Fehlermeldung gebracht:

    CreateArray.h(17): E2293 ) erwartet

    Also erwartet er irgendwie ne Klammer. Aber keine Ahnung wo?
    void CreateTable(TStringGrid 😉
    geht auch nicht, kommt die selbe Fehlermeldung. Keine Ahnung???



  • Sorry, in deine H-Datei kommt noch:

    #include <Grids.hpp>
    

    Dachte erst, das das bereits in VCL.H mit includet wird, nach einem Test zeigte sich aber, das ich falsch lag. 😃

    Ein Tip noch: Vermeide unnötige Doppelincludes, da so etwas die Kompilierzeiten verlängert. 😉



  • Das hab ich auch probiert, bedauerlicherweise "nur" mit
    #include <Grids.h>
    und es ging nicht. Wieso muss ich da noch hpp dranschreiben, woher weiß ich wann ich welche Endung benutzen muss.

    Danke jetzt gehts!

    PS: ist der Klassenaufbau soweit okay, ich wollte noch Methoden machen um den Dateinamen zu setzen, und um das Array zu übergeben. Ist das vom Prinzip richtig?

    Gruß Giovanni



  • GiovanniRena schrieb:

    Wieso muss ich da noch hpp dranschreiben, woher weiß ich wann ich welche Endung benutzen muss

    Windows-Suche nutzen (und nach datei.* suchen)1
    :p



  • GiovanniRena schrieb:

    Wieso muss ich da noch hpp dranschreiben

    Die VCL-Controls und -Klassen liegen als ObjectPascal-Units vor (aus Delphi), für die Verwendung im BCB existieren spezielle Header, üblicherweise mit der Endung .hpp.
    Wenn in der Hilfe zu einer Komponente oder Klasse z.B. Unit: Grids steht dann bedeutet das, dass Grids.hpp benötigt wird. Wenn du das Objekt zur Entwurfszeit auf die Form ziehst sorgt der BCB selbstständig für die Includes, beim Erzeugen zur Laufzeit musst du das erledigen.

    Falls ein Standard-C/C++-Header benötigt wird steht in der Hilfe übrigens ausdrücklich xyz.h.


Anmelden zum Antworten