[C++/BCB] Deklaracja klasy błąd w kodzie, nie mam pojęcia jak go poprawić

0

Nagłówek:

 
#ifndef Unit6H
#define Unit6H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------

class TDocument : public TTabSheet
{

public:
  TDocument::TDocument(TPageControl *APageControl): TTabSheet(APageControl)
{
  PageControl = APageControl;
  Caption = "Nowy dokument";
  RichEdit = new TRichEdit(this);
  RichEdit->Parent = this;
  RichEdit->Align = alClient;
  RichEdit->WordWrap = false;
  RichEdit->ScrollBars = ssBoth;
}
  __fastcall ~TDocument();
  void LoadFromFile(String AFileName);
  TRichEdit *RichEdit;
  String FileName;

};

extern PACKAGE TDocument *TDocument;

#endif

Implementacja:

 

#include <vcl.h>
#pragma hdrstop

#include "Unit5.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
#pragma resource "*.dfm"
TDocument *TDocument;

//---------------------------------------------------------------------------

void TDocument::LoadFromFile(String AFileName)
{
  FileName =  AFileName;
  RichEdit->Lines->LoadFromFile(FileName);
  Caption = ExtractFileName(FileName);
}

To jest jeden z modułów mojego prymitywnego edytora tekstu, niestety kompilator nie chce go przepuścić. Nie mam pojęcia co robię źle. Proszę o szybką pomoc, to sprawa życia i śmierci. Program tworze w C++ Builder 6.

[C++ Error] Unit5.h(13): E2303 Type name expected
[C++ Error] Unit5.h(16): E2293 ) expected
[C++ Error] Unit5.h(28): E2303 Type name expected
[C++ Error] Unit5.h(28): E2139 Declaration missing ;
[C++ Error] Unit5.cpp(12): E2356 Type mismatch in redeclaration of 'TDocument'
[C++ Error] Unit5.h(36): E2344 Earlier declaration of 'TDocument'
[C++ Error] Unit5.cpp(12): E2141 Declaration syntax error
[C++ Error] Unit5.cpp(19): E2451 Undefined symbol 'RichEdit'
[C++ Error] Unit5.cpp(20): E2451 Undefined symbol 'Caption'

0

Też Witaj.
TDocument::TDocument
Ten kawałek jest błędny. Taka składnia występuje kiedy implementujesz metodę poza klasą.
Dalej nie przeglądałem.

0
extern PACKAGE TDocument *TDocument;

Nazwij wskaźnik inaczej jak klasę, choćby *_TDocument

Jakbyś pokazał cały kod byłoby łatwiej, w output'cie wypisuje Ci gdzie masz błędy w których liniach. Popraw je a program powinien odpalić.

0

[C++ Error] Unit5.h(13): E2303 Type name expected
[C++ Error] Unit5.h(16): E2293 ) expected
[C++ Error] Unit5.h(28): E2303 Type name expected
[C++ Error] Unit5.h(28): E2139 Declaration missing ;

[C++ Error] Unit5.cpp(19): E2451 Undefined symbol 'RichEdit'
[C++ Error] Unit5.cpp(20): E2451 Undefined symbol 'Caption

Nie do końca rozumiem o co chodzi kompilatorowi w 13 linijce, nie wiem czemu chce ode mnie nazwy typu w tym miejscu.

0

Gdy usuwam to co mi wskazałeś dochodzi jeszcze jeden błąd, a te pozostałe nie znikają

[C++ Error] Unit5.cpp(17): E2316 'TDocument::LoadFromFile(AnsiString)' is not a member of 'TDocument'

0

Nie wywołałem jeszcze tej funkcji w głównym programie, napisałem jedynie jej definicje tj. funkcji LoadFromFile zadeklarowanej w klasie.

void TDocument::LoadFromFile(String AFileName)
{
  FileName =  AFileName;
  RichEdit->Lines->LoadFromFile(FileName);
  Caption = ExtractFileName(FileName);
} 

Zmieniony kod modułu:

Nagłówek:

 
#ifndef Unit6H
#define Unit6H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------

class TDocument : public TTabSheet
/*13 linia*/{

public:
/*16 linia*/  TDocument(TPageControl *APageControl): TTabSheet(APageControl)
{
  PageControl = APageControl;
  Caption = "Nowy dokument";
  RichEdit = new TRichEdit(this);
  RichEdit->Parent = this;
  RichEdit->Align = alClient;
  RichEdit->WordWrap = false;
  RichEdit->ScrollBars = ssBoth;
}
  __fastcall ~TDocument();
  void LoadFromFile(String AFileName);
  /*29 linia*/ TRichEdit *RichEdit;
  String FileName;

};

extern PACKAGE TDocument *Document;

#endif

Implementacja:

 

#include <vcl.h>
#pragma hdrstop

#include "Unit5.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
#pragma resource "*.dfm"
TDocument *TDocument;

//---------------------------------------------------------------------------

void TDocument::LoadFromFile(String AFileName)
{
  FileName =  AFileName;
  RichEdit->Lines->LoadFromFile(FileName);
  Caption = ExtractFileName(FileName);
}

[C++ Error] Unit5.h(13): E2303 Type name expected
[C++ Error] Unit5.h(16): E2293 ) expected
[C++ Error] Unit5.h(29): E2321 Declaration does not specify a tag or an identifier
[C++ Error] Unit5.h(29): E2303 Type name expected
[C++ Error] Unit5.h(29): E2139 Declaration missing ;
[C++ Error] Unit5.cpp(17): E2316 'TDocument::LoadFromFile(AnsiString)' is not a member of 'TDocument'

0

Te nagłówki domyślnie dodał c++ Builder, gdy nowy moduł dodałem.

Zrezygnowałem, z dodawania tej klasy w oddzielnym module i o dziwo program zadziałał, ale mam problem z użyciem funkcji LoadFromFile, próbuje jej użyć w niżej pokazany sposób, ale kompilator wykrywa błąd, nie wiem co robię nie tak.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TDocument::LoadFromFile(OpenDialog1->FileName) ;
}
 

[C++ Error] Unit1.cpp(85): E2283 Use . or -> to call 'TDocument::LoadFromFile(AnsiString)'

Nagłówek:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Buttons.hpp>
#include <Menus.hpp>
#include <ActnList.hpp>
#include <ImgList.hpp>
#include <ToolWin.hpp>
#include <Dialogs.hpp>
#include <String>
#include "Unit2.h"





//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TPageControl *PageControl1;
        TMainMenu *MainMenu1;
        TMenuItem *Plik1;
        TMenuItem *Z1;
        TMenuItem *Wczytaj1;
        TMenuItem *Zamknij1;
        TMenuItem *OProgramie1;
        TMenuItem *Nowakarta1;
        TActionList *ActionList1;
        TToolBar *ToolBar1;
        TImageList *ImageList1;
        TToolButton *ToolButton1;
        TToolButton *ToolButton2;
        TMenuItem *Zamknijkart1;
        TButton *Button1;
        TOpenDialog *OpenDialog1;
        void __fastcall DodajZakladke(TPageControl *PageControl1);
        void __fastcall BitBtn1Click(TObject *Sender);
        void __fastcall ToolButton1Click(TObject *Sender);
        void __fastcall ToolButton2Click(TObject *Sender);
        void __fastcall OProgramie1Click(TObject *Sender);
        void __fastcall Zamknijkart1Click(TObject *Sender);
        void __fastcall Nowakarta1Click(TObject *Sender);
        
private:	// User declarations
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
};

//---------------------------------------------------------------------------

class TDocument : public TTabSheet
{

public:

  TDocument(TPageControl *APageControl);
  __fastcall ~TDocument();
  void LoadFromFile(AnsiString AFileName);
  TRichEdit *RichEdit;
  String FileName;

};
TDocument::TDocument(TPageControl *APageControl): TTabSheet(APageControl)
{
  PageControl = APageControl;
  Caption = "Nowy dokument";
  RichEdit = new TRichEdit(this);
  RichEdit->Parent = this;
  RichEdit->Align = alClient;
  RichEdit->WordWrap = false;
  RichEdit->ScrollBars = ssBoth;
}
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
extern PACKAGE TDocument *Document;
//---------------------------------------------------------------------------
#endif
 

Implementacja:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
int i=1;
 void __fastcall TForm1::DodajZakladke(TPageControl *PageControl1)
{
  TTabSheet *Zakladka;
  Zakladka = new TTabSheet(PageControl1);
  Zakladka->PageControl = PageControl1;
  Zakladka->Caption="Dokument " +IntToStr(i++);
  TRichEdit *RichEdit;
  RichEdit = new TRichEdit(Zakladka);
  RichEdit->Parent = Zakladka;
  RichEdit->Align = alClient;
  RichEdit->ScrollBars = ssBoth;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
     DodajZakladke(PageControl1);
}

//---------------------------------------------------------------------------

void __fastcall TForm1::ToolButton1Click(TObject *Sender)
{
       DodajZakladke(PageControl1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ToolButton2Click(TObject *Sender)
{
       delete(PageControl1->ActivePage);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OProgramie1Click(TObject *Sender)
{
       AboutBox->ShowModal();
       if (AboutBox->ModalResult==mrOk)
       {
         AboutBox->Close();
       }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Zamknijkart1Click(TObject *Sender)
{
       delete(PageControl1->ActivePage);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Nowakarta1Click(TObject *Sender)
{
      DodajZakladke(PageControl1);
}
//---------------------------------------------------------------------------

void TDocument::LoadFromFile(AnsiString AFileName)
{
  FileName =  AFileName;
  RichEdit->Lines->LoadFromFile(FileName);
  Caption = ExtractFileName(FileName);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TDocument::LoadFromFile(OpenDialog1->FileName) ;
}
//---------------------------------------------------------------------------

 
0

Teraz wyskakuje, że niewłaściwie używam TDocument, jak użyć go właściwie?

[C++ Error] Unit1.cpp(85): E2108 Improper use of typedef 'TDocument'

0

Tyle, że funkcja LoadFromFile nie jest częścią TForm1 tylko TDocument, a bez użycia TForm nie potrafię utworzyć przycisku. W sumie nie do końca wiem co robię, a do wtorku muszę skończyć ten projekt choćby nie wiem co, mimo, że to chyba ponad moje siły :(

[C++ Error] Unit1.cpp(123): E2316 'LoadFromFile' is not a member of 'TForm1'

1 użytkowników online, w tym zalogowanych: 0, gości: 1