У меня есть библиотека, написанная не очень тщательным кодером, который включает следующий код в заголовочном файле C:
/* SomeCHeaderFile.h */
...
#define local static
#define package
#define global
Когда этот файл включен в заголовок C++, например: EDIT: я забыл упомянуть, что я включаю заголовок следующим образом:
// SomeCPlusplusSourceFile.cpp
extern "C" {
#include "SomeCHeaderFile.h"
}
...
компилятор дает следующую ошибку:
error: constructor cannot be static member function
error: 'std::locale::locale(const std::locale&)' cannot be overloaded
error: with 'std::locale::locale(const std::locale&)'
Я только говорю, что кодер не был дотошным, потому что он/он никогда не тестировал его в коде C++. Но я не знаю, почему это объясняется тем, почему это приводит к сбою сборки?
gcc версия 4.4.3 | ubuntu linux
Вы можете использовать файлы заголовков C в файлах CPP следующим образом:
extern "C" {
//Headers go here
}
Подробнее здесь:
extern "C" { #include "SomeCHeaderFile.h" }
Кажется, что проблемный заголовочный файл C переопределяет токены, используемые стандартными файлами заголовков C++. Если вы хотите использовать заголовочный файл C в коде C++, вам может потребоваться включить его после стандартных файлов заголовков, чтобы предотвратить эту проблему.
Это может не укрывать вас от проблем, если код C++ определяет свои собственные макросы, которые также переопределяют одни и те же токены. Если это произойдет, вам придется отделить ваш C++ код от файлов, посвященных C++, который использует неприятный заголовочный файл C и C++ код, который этого не делает. Код C++, который использует неприятный заголовочный файл C, не должен использовать какой-либо файл заголовка C++, который может вызвать проблемы.
static
- это ключевое слово, и я думаю, что ваш программный код использует его неправильно. Похоже, вы создаете свои собственные ключевые слова, пожалуйста, не делайте этого.