CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TFrame jako template

TFrame jako template

dział ogólny

TFrame jako template

Nowy postprzez krzychu019 » poniedziałek, 5 maja 2014, 18:23

Witam,

Tak mnie naszło by użyć TFrame-a ale tworząc szablon... - widząc że się da, od razu buźka była zadowolona. Zamknąłem projekt minęło parę dni, wracam do projektu i tu niespodzianka - otwierając usuwa frame-a z formy i wywala że nie może znaleźć klasy wrrr. Powtórzyłem czynność tworząc nowy projekcik, definiując frame-a jako template-a, kładąc go na formę wszystko pięknie, kompiluje się, zamykam projekt, otwieram i buu klasa nie znaleziona, ramka usunięta. Widzę że jest z tym problem, może ktoś wie jak to rozwiązać

templacik:
KOD cpp:     UKRYJ  
template <class T1, class T2>
class TTemplateViewFrame : public TFrame
{
__published:    // IDE-managed Components
private:    // User declarations
public:        // User declarations
  __fastcall TTemplateViewFrame (TComponent* Owner);
 
    virtual void __fastcall Add(T1, T2); //jakas sobie funkcja
};
//---------------------------------------------------------------------------
template <class T1, class T2>
__fastcall TTemplateViewFrame <T1,T2>::TTemplateViewFrame (TComponent* Owner)
  : TFrame(Owner)
{
}
//---------------------------------------------------------------------------
template <class T1, class T2>
void __fastcall TTemplateViewFrame <T1,T2>::Add(T1 Key, T2 Item)
{
}
//---------------------------------------------------------------------------
 


Dziedziczony framik:
KOD cpp:     UKRYJ  
typedef TTemplateViewFrame <int, int> TIntIntViewFrame;
//---------------------------------------------------------------------------
class TViewFrame : public TIntIntViewFrame
{
__published:    // IDE-managed Components
private:    // User declarations
public:        // User declarations
  __fastcall TViewFrame(TComponent* Owner);
};
//---------------------------------------------------------------------------
__fastcall TViewFrame::TViewFrame(TComponent* Owner)
  : TIntIntViewFrame(Owner)
{
}
//---------------------------------------------------------------------------
 


Wrzucam TViewFrame na formę, wszytko ok, ładnie się pojawia, kompiluje. Po ponownym otwarciu Error creating form: 'TIntIntViewFrame' not found i
TViewFrame not found.

Dodam że chcą zrobić bez typedef-a bezpośrednio:
KOD cpp:     UKRYJ  
class TViewFrame : public TTemplateViewFrame <int, int="int">


to otrzymuje error Declaration of class TViewFrame is missing or incorect (nie da się skompilować)

co sądzicie o tym?

PS Środowisko Borland C++ Builder 6.0
Ostatnio edytowano poniedziałek, 5 maja 2014, 19:39 przez polymorphism, łącznie edytowano 1 raz
Powód: Do kodu używaj znaczników CPP.
Avatar użytkownika
krzychu019
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): poniedziałek, 11 czerwca 2012, 11:25
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: TFrame jako template

Nowy postprzez polymorphism » poniedziałek, 5 maja 2014, 19:55

Podejrzewam, że twórcy środowiska nie przewidzieli szablonów w "klikanych" kontrolkach.

Czy ten projekt, z którego znikają frame'y, ma zdefiniowaną choć jedną instancję szablonowej klasy, czy wszystko wyklikane w IDE? Pytam z ciekawości.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: TFrame jako template

Nowy postprzez krzychu019 » poniedziałek, 5 maja 2014, 21:54

Testowo jest to czysty projekt, formularz na który kładę frame-a.

Borland umożliwia utworzenie swojego frame-a (który jest dziedziczony z TFrame -coś pomiędzy zwykły panel a formularz, można dodawać na niego komponenty itd a co najważniejsze stanowi osobny moduł, plik jak formularz a więc można np. pogrupować kod na moduły. Po stworzeniu frame-a aby go wykorzystać używam Frames, wybieram utworzonego wcześniej frama z listy i klikam na formularzu - zostaje załadowany na formularz - tworzony jest jak formularz, łączony jest poprzez pragme - poniżej kod dla zwykłej ramki położonej na forme:

KOD cpp:     UKRYJ  
USEFORM("MainFormUnit.cpp", MainForm);
USEFORM("TemplateFrameUnit.cpp", TemplateFrame); /* TFrame: File Type */
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  try
  {
     Application->Initialize();
     Application->CreateForm(__classid(TMainForm), &MainForm);
     Application->Run();
  }
  catch (Exception &exception)
  {
     Application->ShowException(&exception);
  }
  catch (...)
  {
     try
     {
       throw Exception("");
     }
     catch (Exception &exception)
     {
       Application->ShowException(&exception);
     }
  }
  return 0;
}
//---------------------------------------------------------------------------
//----------------< MainForm.cpp: >------
#include "MainFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "TemplateFrameUnit"
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//----------------< MainForm.h: >----------------------------------------
#include "TemplateFrameUnit.h"
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published:    // IDE-managed Components
  TTemplateFrame *TemplateFrame1;
private:        // User declarations
public:         // User declarations
  __fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
//----------------< TemplateFrame.h: >----------------------------------------
class TTemplateFrame : public TFrame
{
__published:    // IDE-managed Components
private:        // User declarations
public:         // User declarations
  __fastcall TTemplateFrame(TComponent* Owner);
};
 


Natomiast ja chciałem stworzyć frame-a jako template-a, oprogramować kilka funkcji i później tylko tworzyć nowe framy z tak zdefiniowanego templata podając już konkretne typy. I wszytko działa prawidłowo czyli osiągnąłem zamierzony cel, program się skompilował i uruchomił ale po zamknięciu i ponownym otwarciu gubi linki i framy są usuwane :(

Jak się upewnić że kompilator skompilował poprawnie wszystkie metody TTemplateViewFrame<x,y> dla każdej potrzebnej pary x,y?
Avatar użytkownika
krzychu019
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): poniedziałek, 11 czerwca 2012, 11:25
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: TFrame jako template

Nowy postprzez polymorphism » poniedziałek, 5 maja 2014, 22:50

Upewniasz się prawie tak samo jak przy zwykłych klasach. Różnica jest taka, że w przypadku szablonu musi nastąpić jego konkretyzacja, wtedy kompilator jest w stanie go w pełni skompilować, a co za tym idzie wyłapać błędy składniowe.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 9 gości

cron