LINUX.ORG.RU

Проблемы с friend


0

0

Люди добрые помогите!

Сам я совсем не спец в С++, но требуется кой-чего откомпилить, а оно не хочет.

Проблема вот такая:
Есть несколько bla-bla-bla.hpp файлов с описанием неких классов. Все эти классы юзают некую обявленную переменную CI_PACKAGE_ACCESS

Например вот так:

class ciObject : public ResourceObj {
CI_PACKAGE_ACCESS

которая объявлена:

#define CI_PACKAGE_ACCESS \
friend class ciEnv; \
friend class ciScope; \
friend class ciObjectFactory; \
friend class ciConstantPoolCache; \
friend class ciField; \
friend class ciConstant; \
friend class ciFlags; \
friend class ciExceptionHandler; \
friend class ciCallProfile; \
friend class ciFieldLayout; \
friend class ciSignature; \
friend class ciBytecodeStream; \
friend class ciByteCodeStream; \
friend class ciFieldLayoutStream; \
friend class ciSignatureStream; \
friend class ciExceptionHandlerStream; \
friend class ciObject; \
friend class ciNullObject; \
friend class ciInstance; \
friend class ciMethod; \
friend class ciSymbol; \
friend class ciArray; \
friend class ciObjArray; \
friend class ciTypeArray; \
friend class ciKlass; \
friend class ciInstanceKlass; \
friend class ciMethodKlass; \
friend class ciSymbolKlass; \
friend class ciArrayKlass; \
friend class ciObjArrayKlass; \
friend class ciTypeArrayKlass; \
friend class ciKlassKlass; \
friend class ciInstanceKlassKlass; \
friend class ciArrayKlassKlass; \
friend class ciObjArrayKlassKlass; \
friend class ciTypeArrayKlassKlass;

Т.е. из этого обявления следует, что класс имеет кучу друзей и сам себе друг товарищ и брат, что, естественно, не нравится компилятору.

Может кто поможет, какие ключи задать GCC стоб он сглотнул такую конструкцию? Или это не реально, и надо это место вдумчево напильником доработать? В принципе это не проблема, как видите, файлов не много, но хотелось бы сырцы сильно не уродовать.

gcc version 3.3.2 20031022 (Red Hat Linux 3.3.2-1)

Это, типа, на федоре у меня. А компилю я j2sdk-1.3.1 (JVM от IBM, SUN, BlackDown откомпилирована компилятором ветки 2.х и на федоре не работает)

★★★★★

Пиздец стиль программирования...

Первое что приходит в голову - развернуть дефайны руками (copy/paste тебе поможет), убрав friend самого себя из каждого класса.

Препроцессором это IMHO никак не сделать.

abbr
()
Ответ на: комментарий от abbr

Спасибо. Бум ковырять....

vada ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.