Проблема в том, что std :: string и другие контейнеры являются шаблонными классами.Они генерируются во время компиляции для каждого двоичного файла, поэтому в вашем случае они генерируются по-разному.Вы можете сказать, что это не одни и те же объекты.
Чтобы исправить это, у вас есть несколько решений, но все они следуют одному и тому же правилу: не раскрывайте никакого кода шаблона в общем коде вашего заголовкамежду двоичными файлами .
Вы можете создать определенные интерфейсы только для этой цели или просто убедиться, что ваши заголовки не предоставляют типы шаблонов и функции.Вы можете использовать эти типы шаблонов в своих двоичных файлах, но не открывайте их другим двоичным файлам.
std :: string в интерфейсах можно заменить на const char *.Вы все еще можете использовать std :: string в своих системах, просто запросите const char * в интерфейсах и используйте std :: string :: c_str () для предоставления ваших данных.
Для карт и других контейнеров выдолжны предоставлять функции, которые позволяют внешнему коду манипулировать внутренней картой.Как "Найти (const char * key);".
Основная проблема будет с членами шаблона ваших открытых классов.Чтобы это исправить, используйте идиому PImpl: создайте (или сгенерируйте) API, заголовки, которые просто показывают, что можно сделать с вашими двоичными файлами, а затем убедитесь, что у API есть указатели на реальные объекты внутри ваших двоичных файлов.API будет использоваться снаружи, но внутри вашей библиотеки вы можете кодировать что угодно.DirectX API и другие OS API сделаны таким образом.