Итак, я попытался создать небольшую библиотеку-оболочку C++. (на самом деле это может быть только заголовок) вокруг библиотеки C с использованием пространства имен, но в какой-то момент мне нужно будет раскрыть структуры C в кодовой базе C++:
Код: Выделить всё
// wrapper.h
#ifndef WRAPPER
#define WRAPPER
namespace Wrapper
{
// if the extern declaration is outside the namespace,
// i have conflicts on structures names
extern "C" {
#include "myCLibHeader.h" // includes
}
// functions from the C library :
// Data1, Data2, Data3 are typedef for C structures
// How can i expose them without conflicting with the C++ code base ?
void foo(Data1 *d1, Data2 *d2);
void bar(Data3 *d3);
// ... some more
}
#endif
В файле, включенном из /usr/include/c++/7/math.h:36:0, [build]
из /path/to/myCLibHeader.h:12 , [сборка] из
/path/to/wrapper.h:10, [сборка] из
/path/to/wrapper.cpp:1: [сборка] /usr/include/c++/7 /cmath:83:11: ошибка:
'::acos' не был объявлен [сборкой] с использованием ::acos;
И есть еще много ошибок с asin, atan2 и так далее...
Если я перенесу объявление extern за пределы пространства имен, то я избавлюсь от этих ошибок компиляции, но тогда у меня появятся другие ошибки, связанные с конфликтами имен структур, поскольку некоторые из них уже определены в глобальном пространстве имен C++.
Как я могу это решить?
Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/785 ... -c-library
Мобильная версия