У меня есть проект, в котором смешиваются 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 ++. Есть ли какое-нибудь объяснение того, что здесь происходит?