Problem z typami danych

0

Witam,

Korzystam z komponentów GR32, po dołączeniu plików nagłówkowych pojawia się problem bo w GR32.hpp jest np:
typedef Types::TRect TRect;

i teraz chcąc np obsłużyć zdarzenie OnDrawItem jakiegoś komponentu generowana jest funkcja np:
void __fastcall TestDrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State);

i pojawia się error przy kompilacji "Ambiguity between TRect and Types::TRect"

ok, mogę dodać Types:: i jest ok w sensie można uruchomić program:
void __fastcall TestDrawItem(TWinControl *Control, int Index, Types::TRect &Rect, TOwnerDrawState State);

ale borland za każdym razem przy zapisie czy kompilacji się pluje że "TestDrawItem method referenced byTestListBox->OnDrawItem has an incopatible parameter list. Remove the reference?"

Jak to rozwiązać?

Pozdrawiam

0

Możesz usunąć "using namespace Types" czy to jest gdzieś implicite zaszyte w środowisku?

0
vpiotr napisał(a):

Możesz usunąć "using namespace Types" czy to jest gdzieś implicite zaszyte w środowisku?

Nie ma nigdzie odwołania do przestrzeni Types (jest to integralna przestrzeń w borlandzie z której korzystają komponenty vcl), i podając nawet jawnie że chce użyć TRect z Types poprzez using namespace Types; lub using Types::TRect; otrzymuję error przy próbie użycia TRect opisany powyżej.

co mogę zrobić to zaremować linię w grupie namespace Gr32 //typedef Types::TRect TRect; w GR32.hpp i wówczas jest ok ale nie jest to ładne rozwiązanie ...

0

najlepiej byłoby, gdyby:

  1. gr32.hpp odwoływało się do Gr32::TRect
  2. Ty w swoim kodzie możesz się odwoływać do Gr32:: lub Types::

Zobacz jak to jest zrobione tutaj:
http://read.pudn.com/downloads96/sourcecode/graph/texture_mapping/392989/graphics32-1-8-1/GR32_Rasterizers.hpp__.htm

Jeśli możesz to przerób gr32.hpp - to plik generowany automatem, tak? Jakim narzędziem?

0
vpiotr napisał(a):

najlepiej byłoby, gdyby:

  1. gr32.hpp odwoływało się do Gr32::TRect
  2. Ty w swoim kodzie możesz się odwoływać do Gr32:: lub Types::

Zobacz jak to jest zrobione tutaj:
http://read.pudn.com/downloads96/sourcecode/graph/texture_mapping/392989/graphics32-1-8-1/GR32_Rasterizers.hpp__.htm

Jeśli możesz to przerób gr32.hpp - to plik generowany automatem, tak? Jakim narzędziem?

Rozwiązałem to inaczej i myślę że jest to dobra metoda przy pisaniu by nie dołączać plików nagłówkowych w headerze bo prowadzi to do łańcucha zależności.

Zostawiam w .h tylko pliki które borland automatycznie dodaje (bo i tak nie możemy ich usunąć). Resztę wywaliłem.
W moim przypadku potrzebuję użyć z Gr32 TBitmap32 więc zamiast w h dołączać plik nagłówkowy to piszę:
namespace Gr32{ class TBitmap32; } by poinformować kompilator o wykorzystaniu TBitmap

a sam plik nagłówkowy #include "GR32_Image.hpp" dodaje w .cpp

a komponent tworzę podając: Gr32::TBitmap32 *bmp;

i znikają problemy z Ambiguity between TRect and Types::TRect" :)

0

Nie znikają jednak jeśli na formie jest położony jakiś komponent z Gr32 np TImage32 a więc w .h mamy #include "GR32_Image.hpp" i nie możemy tego usunąć i chcąc użyć w kodzie TRect mamy error Ambiguity... to samo jeśli użyjemy jakiś komponent który używa Gr32. :(

0

Nikt nie wie jak to rozwiązać?

Vpiotr - 1) najlepiej by było gdyby się odwoływało ale nie mogę ingerować w GR32 więc lipa
2) ja mogę odwoływać się w swoim kodzie poprzez operator zakresu ale chcą użyć np OnDrawItem już nie bo jest to zdarzenie generowane przez borlanda w sekcji published i jakakolwiek zmiana z TRect na Types::TRect generuje kolejne błędy - opisałem to dokładnie na samym początku.

0

Dołącz ten gr32.hpp tutaj - może coś da się zrobić.

0

Z Gr32.hpp nie ma problemu żeby go zmienić by działało, wystarczy zaremować linie lub dodać ifndef:
#ifndef TypesHPP
typedef Types::TRect TRect;
#endif

i działa ale da się ustawić tak żeby działało bez ingerencji w Gr32 by używać TRect (nawet bez podania skąd ma być wzięte więc jako TRect a nie Types::TRect) bo pamiętam projekt w którym była ta sama sytuacja (wykorzystywał Gr32) i nie było problemu z użyciem TRect (na tym samym kompie więc nie chodzi o ustawienia IDE ale ustawienia projektu).

0

PS zamieniło widzę hasha na 1. przy zamieszczaniu odpowiedzi ale wiadomo o co chodzi

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