Mam dużo kodu w C++, pierwotnie zbudowany na PC. Staram się, aby działał z Objective-C na Macu. W tym celu stworzyłem framework Objective-C do przechowywania kodu C++ i dodano cienkie opakowanie. Ale napotykam problem typedef w moim C++.Używanie C++ z Objective-C, Jak mogę naprawić "Conflicting declaration" typedef int BOOL ""?
Podczas pracy z C++ na komputerze użyłem zmiennej BOOL
zdefiniowanej w WinDef.h. Więc kiedy przeniosłem wszystko na Maca, dodałem w typedef int BOOL;
, aby upewnić się, że zmienna BOOL
nadal będzie się kompilować zgodnie z oczekiwaniami.
Ale kiedy próbuję skompilować, pojawia się błąd: "Conflicting declaration 'typedef int BOOL'
". Zakładam, że dzieje się tak dlatego, że BOOL
jest słowem kluczowym w Objective-C i tak jest już zdefiniowane. Nie mogę też używać Objective-C BOOL
, ponieważ jest to znak bez znaku, a nie int.
Podczas gdy szukałem możliwych rozwiązań znalazłem one że wspomina undefining BOOL, ale nie mogłem znaleźć jak to zrobić (ani nie wiem, czy to rzeczywiście działa). Another sugeruje zmianę nazwy BOOL BOOL na kod w pliku C++ na coś, co nie jest słowem kluczowym. Ta sugestia nie jest dla mnie opcją, ponieważ inne projekty opierają się na kodzie C++. Najlepiej, jeśli jakiekolwiek zmiany, które wprowadzam, powinny pozostać w jednym pliku lub przynajmniej nie powinny mieć negatywnego wpływu na kod na komputerze z systemem Windows.
Jak mogę nie zdefiniować definicji obiektu BOOL dla moich plików C++ i użyć definicji C++, którą dodałem? Czy istnieje lepszy sposób radzenia sobie z tym problemem?
W przypadku pomaga Używam: Xcode 3.2.5, 64-bit i Mac OS X 10.6.6
Dzięki za wszelkie wskazówki!
Dlaczego używasz 'BOOL' w pierwszej kolejności? C++ ma już typ 'bool'. –
Ponieważ w systemie Windows wiele interfejsów API używa typu BOOL zdefiniowanego przez system Windows, który jest rzeczywiście int. Nie jest kompatybilny z BOOL, zwłaszcza jeśli jest częścią struktury, która musi zostać przekazana do takiego API (w Windowsie bool ma rozmiar bajtowy, a BOOL ma cztery bajty). –