undefinierte struktur
-
Hallo,
ich habe gerade ein Problem. Ich bekomme den Fehler undefinierte struktur und weiß nicht warum
mein code:
ABCTest* _abcTest; main... funktion.... _abcTest = new ABCTest(_abcTestName.c_str());Fehler:
[C++ Fehler] E2450 Undefinierte Struktur 'ABCTest'
-
Um etwas mit der Struktur anzufangen, muß dein Compiler auch wissen, wie sie aussieht, deshalb benötigst du irgendwo zwischen dem Dateianfang und dem 'new' Aufruf die Definition
struct ABCTest {...};(bzw. ein#include "ABCTest.h").
-
Ich habe jetzt auch so ein Problem.
//Decl.h #ifndef DEVSTRUCTDECL #define DEVSTRUCTDECL class TDevClasslist; class TDev; struct DevStruct; #endif//--------------------------------------------------------------------------- #ifndef DlgH #define DlgH //--------------------------------------------------------------------------- #include "Decl.h" #include "TDev.h" #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TDevDlg : public TForm { __published: // IDE-managed Components TScrollBox *ScrollBox1; TGroupBox *GroupBox1; TGroupBox *GroupBox2; TComboBox *BKunde; TComboBox *BStandort; TComboBox *BDevice; TGroupBox *GroupBox3; TEdit *ELeistung; TEdit *ESpannung; TEdit *ESchutzkl; TComboBox *BHersteller; TGroupBox *GroupBox4; TEdit *EIso; TEdit *EAbleit; TEdit *ESchutzleit; TComboBox *BBestanden; TGroupBox *GroupBox5; TMemo *MBemerkung; TEdit *EDatum; TEdit *EPruefer; TButton *BtnOK; TButton *BtnAbb; TLabel *Label1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TLabel *Label5; TLabel *Label6; TLabel *Label7; TLabel *Label8; TLabel *Label9; TLabel *Label10; TLabel *Label11; TLabel *Label12; TLabel *Label13; TLabel *Label14; TButton *BtnStd; private: // User declarations void __fastcall Felderfuellen(void); DevStruct dev; public: // User declarations __fastcall TDevDlg(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TDevDlg *DevDlg; //--------------------------------------------------------------------------- #endif[C++ Error] Dlg.h(55): E2450 Undefined structure 'DevStruct' [C++ Error] Dlg.h(55): E2449 Size of 'dev' is unknown or zero [C++ Error] Dlg.h(55): E2450 Undefined structure 'DevStruct'Warum wird DevStruct nicht erkannt, obwohl ich sie in Decl.h deklariert habe?
In der cpp File, wo ich die Header Dlg.h includiert habe, wird die Struktur wieder erkannt.
-
Weil es nur deklariert wurd, aber nicht definiert. Wenn Du ein DevStruct Objekt in Deine Klasse einbetten willst, muss die Größe von DevStruct bekannt sein.
Alternativ kannst Du einen Pointer oder eine Referenz benutzen:
DevStruct* dev;oderDevStruct& dev;.
Hierbei wird nur der Zeiger in Deinen TDevDlg-Objekten gespeichert, und dessen Größe ist auch ohne Definition von DevStruct bekannt.
Such mal im Netz nach Forward-Deklaration.
-
In der Headerdatei TDev.h, welche ebenfalls includiert ist, habe ich DevStruct definiert.
//--------------------------------------------------------------------------- struct DevStruct { AnsiString Inventarnummer; AnsiString Kunde; AnsiString Standort; AnsiString Device; AnsiString Hersteller; AnsiString Leistung; AnsiString Spannung; AnsiString Schutzklasse; AnsiString Isolationswiderstand; AnsiString Ersatzableitstrom; AnsiString Schutzleiterwiderstand; AnsiString Bestanden; AnsiString Bemerkung; AnsiString Datum; AnsiString Pruefer; AnsiString Barcode; AnsiString Messverfahren; AnsiString Line; int ID; }; //---------------------------------------------------------------------------
-
Wozu brauchst du dann noch die Forwarddeklaration in der Decl.h?
Ist die Deklaration in der TDev.h vielleicht noch in einem Namespace?
-
Ne ist es nicht.
Ich habe offensichtlich einen Logikfehler in der include-Reihenfolge gemacht.
Hab einfach ein paar includes anders gesetzt und jetzt funktioniert es.
Die Vorwärtsdeklaration ist in der Tat überflüssig und habe ich auch rausgenommen.