Linker Error c++ builder

Odpowiedz Nowy wątek
2011-10-10 11:48
0

Witam,
W programie, który ma wczytywać pliki do zakładek, pojawia mi się błąd.
Robione w C++ Builder 6. Dzięki za wszelkie podpowiedzi, bo próbuję na różne strony
i już nie wiem.

nagłówek:


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

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMainMenu *MainMenu1;
        TMenuItem *Plik1;
        TMenuItem *OtwrzPlik1;
        TPageControl *PageControl1;
        TOpenDialog *OpenDialog1;
        TSaveDialog *SaveDialog1;
        TMenuItem *Zapisz1;

        void __fastcall OtwrzPlik1Click(TObject *Sender);
        void __fastcall DodajZakladke(TPageControl *PageControl1);
        void __fastcall Wczytaj(TPageControl *PageControl1);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------

class TDocument : public TTabSheet
{
public:

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

};
TDocument::TDocument(TPageControl *PageControl1): TTabSheet(PageControl1)
{
  PageControl = PageControl1;
  Caption = "Nowy dokument";
  RichEdit = new TRichEdit(this);
  RichEdit->Parent = this;
  RichEdit->Align = alClient;
  RichEdit->WordWrap = false;
  RichEdit->ScrollBars = ssBoth;
}

#endif

treść:

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

#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 TDocument::LoadFromFile(String AFileName)
{
  FileName =  AFileName;
  RichEdit->Lines->LoadFromFile(FileName);
  Caption = ExtractFileName(FileName);
}

void __fastcall TForm1::Wczytaj(TPageControl *PageControl1)
{
    TDocument *Doc1;
    Doc1 = new TDocument(PageControl1) ;
    if (OpenDialog1->Execute())
    {
     Doc1->RichEdit->Lines->LoadFromFile(OpenDialog1->FileName);
    }
}

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

A błąd to:
[Linker Error] Unresolved external '__fastcall TDocument::~TDocument()' referenced from D:\EDYTOR\UNIT1.OBJ

Pozostało 580 znaków

2011-10-10 11:58
0

Brakuje implementacji destruktora w klasie TForm1 TDocument


edytowany 1x, ostatnio: byku_guzio, 2011-10-10 12:11
A nie TDocument? - Endrju 2011-10-10 12:01
Rzeczywiście TDocument - za daleko przewinąłem ekran w poszukiwaniu nazwy klasy :D - byku_guzio 2011-10-10 12:11
Heh, no właśnie, już się zacząłem zastanawiać, dlaczego TForm1 ;/ Sęk w tym, że się zamotałem i nie bardzo wiem, co tam wpisać. Nie oczekuję od Was konkretów, bo chcę to zrozumieć, ale dzięki z góry za każdą podpowiedź :) - DanielCz 2011-10-10 12:26
Musisz tam zwolnić pamięć, powinno wystarczyć zwolnić pamięć, którą przydzielasz na TRichEdit - byku_guzio 2011-10-10 12:40
Aha, no właśnie wiem, że muszę zwolnić pamięć, ale gdzie to dać, jak już mam ~TDocument() w klasie ;/ - DanielCz 2011-10-10 12:52
masz tylko deklarację, nie masz definicji - jeżeli nie odróżniasz tych dwóch rzeczy to na okienka jeszcze za wcześnie dla Ciebie - byku_guzio 2011-10-10 13:23

Pozostało 580 znaków

2011-10-10 13:27

jak już mam ~TDocument() w klasie

jak masz jak nie masz, dlatego właśnie błąd dostajesz. w klasie deklarujesz destruktor

  __fastcall ~TDocument();

a potem nigdzie nie ma jego definicji.

Pozostało 580 znaków

2011-10-10 13:43
0

Dzięki wielkie za cierpliwość :) Udało się.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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