Доступ к структуре C как классу C ++ - PullRequest
3 голосов
/ 12 февраля 2011

Есть ли обходной путь для этой ошибки в gcc ?

В частности, я думаю, что сталкиваюсь с ошибкой при компиляции оболочки для pthread_mutex_t. Заголовок выглядит так:

class DerivedClass: public pthread_mutex_t{
  public:
     DerivedClass() {}
     ~DerivedClass(){}
     DerivedClass someFunction(){}
};

Код взят из устаревшей системы и используется для компиляции в GCC 3.2.x, но не в GCC 4.1.2.

... Теоретически, я думаю, я мог бы перекомпилировать все в GCC с обратной версией или реорганизовать ссылочные источники, чтобы отключить оболочку, но я хочу посмотреть, есть ли более простой способ в первую очередь.

Большое спасибо.

1 Ответ

5 голосов
/ 12 февраля 2011

Ошибка исправлена ​​в GCC 4.6.0, но если вам это нужно сейчас, используйте вместо этого композицию:

class DerivedClass {
  public:
    pthread_mutex_t mutex;
// ...
}

Если вам нужен класс, который можно преобразовать в pthread_mutex_t *, убедитесь, что в вашем классе нет виртуальных функций, и поместите мьютекс в качестве первого элемента в классе; затем вы можете безопасно конвертировать между DerivedClass * и pthread_mutex_t *. Или добавьте operator pthread_mutex_t *().

...