Problem przy konwersji z buildera 6 na 2010

Odpowiedz Nowy wątek
2011-09-03 09:27
crl
0

Witam
Zajmuję się przenoszeniem aplikacji z builder-a 6 na 2010. Szło mi w miarę sprawnie, ale wczoraj natrafiłem na błąd którego nijak nie mogę poprawić. Może ktoś z Was będzie w stanie mi pomóc.

Kompilator przy:

std::vector<SPersonAbs*> PersonAbs;

wyrzuca:
[BCC32 Error] MainDM.h(1525): E2451 Undefined symbol 'SPersonAbs'
[BCC32 Error] MainDM.h(1525): E2188 Expression syntax
[BCC32 Error] MainDM.h(1525): E2299 Cannot generate template specialization from 'vector<_Ty,_Ax>'
[BCC32 Error] MainDM.h(1525): E2270 > expected
[BCC32 Error] MainDM.h(1525): E2040 Declaration terminated incorrectly

Natomiast przy:

void SavePersonAbsence(SPersonAbs * pa);

[BCC32 Error] MainDM.h(1524): E2293 ) expected

SPersonAbs znajduje się w pliku structures.h który jest dołączony w nagłówku.
Gdy używam innych struktur z tego pliku, wszystko jest ok.
Zakomentowałem cały kod struktury i nic, więc problem raczej w niej nie leży.
Dodatkowo natrafiłem na inną „śmieszną” rzecz. W plik znajduje się struktura:

typedef struct _SKod
{
char a;
char b;
} SKod;

Dodałem drugą idnetyczną:

typedef struct _SKod2
{
char a;
char b;
} SKod2;

I o dziwo:
_SKod test1;
_SKod2
test2;

Test 1 jest ok, natomiast przy test2 wyrzuca:
[BCC32 Error] MainDM.h(1520): E2303 Type name expected
[BCC32 Error] MainDM.h(1520): E2139 Declaration missing ;

Ktoś ma jakieś pomysły?

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-09-03 14:14
0

Błędy w składni, widocznie stara wersja przepuszczała błędy. IMO BCC32 nie jest zbyt kompetentnym kompilatorem C++.
Jak nie umie znaleźć SPersonAbs, to zrób przynajmniej predeklarację klasy (class SPersonAbs;). Mi się wydaje że coś dziwnie includuje te pliki.

Wykonaj testy "na sucho" w czystym projekcie z tymi strukturami i podziałem na pliki.

Pozostało 580 znaków

2011-09-03 14:45
0

może są gdzieś w kodzie #ifdefy sprawdzające wersję środowiska i to psuje

typedef struct _SKod
{
char a;
char b;
} SKod;
_SKod* test1;

to jest w pliku .c czy .cpp? bo mieszasz skladnię C z C++. różne wersje kompilatora, zwłaszcza starsze, mogą na to dziwnie reagować.

edytowany 1x, ostatnio: Azarien, 2011-09-03 14:52

Pozostało 580 znaków

2011-09-05 07:54
crl
0
Azarien napisał(a)

to jest w pliku .c czy .cpp? bo mieszasz skladnię C z C++.

To plik cpp

Wydaje się, że predeklaracja załatwiła sprawę, ale zrobię jeszcze kilka testów.
Dzięki za pomoc.

Pozostało 580 znaków

2011-09-05 09:12
0

To plik cpp

zatem powinno być po prostu

struct SKod
{
char a;
char b;
};
SKod* test1;

albo, jeśli chcesz mieć kod zgodny z C i C++

typedef struct
{
char a;
char b;
} SKod;
SKod* test1;

Pozostało 580 znaków

2011-09-08 09:06
crl
0

Kolejny błąd.
Build aplikacji zakończył się powodzeniem ale przy uruchamianiu pojawia się taki komunikat:

http://www.freeimagehosting.net/9a532

cpu:
http://www.freeimagehosting.net/a0618

event log:
http://www.freeimagehosting.net/85ba7

stack:
http://www.freeimagehosting.net/e40ab

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