Использование struct / typedef в стиле C из C ++

У меня есть проект, в котором смешиваются C и C ++. В заголовочном файле C у меня есть такой код:

typedef struct mystruct* mystruct;
struct mystruct {
    // whatever struct needs
};

И чтобы использовать его в файле C ++, я делаю:

extern "C" {
#include "mystruct.h"
}

Итак, вы видите, что я создаю непрозрачный указатель с теми же именами. Это нормально для C, но не для C ++ (из-за необходимости создания экземпляра с использованием ключевого слова struct в C, но не в C ++). Однако я получаю сообщение об ошибке (противоречивые объявления) при попытке скомпилировать код C ++. Я думал, что использование extern «C» заставит компилятор рассматривать заголовок C как C, но, похоже, он все еще использует его как C ++. Есть ли какое-нибудь объяснение того, что здесь происходит?

7
задан buck 12 July 2011 в 20:35
поделиться