2013-08-28 2 views
0

У меня есть проект на C++, который компилируется как DLL. У меня есть несколько классов, которые обладают m_dSurveyStore в качестве переменных-членов. На картах есть ключи std::string и различные пользовательские классы для значений. например .:C++ Unordered Map Exposed From DLL char

std::unordered_map< std:string , Survey > SurveyStore; 

Классы должны быть выставлены из моей библиотеки DLL для использования других программ (как консольные C++, но и .Net кода). Когда я использую std::string в качестве ключа карты, я получаю предупреждения компилятора в соответствии с «необходимостью иметь dll-интерфейс, который будет использоваться клиентами класса». Я читал другие сообщения, которые предупреждают об экспорте интерфейсов, которые используют std-типы.

В идеале мои карты были бы переменные частные члены и (я думал) не будет подвергаться за пределами DLL:

class __declspec(dllexport) Project 
{ 
    private: 
     SurveyStore m_dSurveyStore; 
} 

Должен ли я использовать char * для моей карты типа ключа, если я хочу, чтобы выставить класс с этими карты в качестве членов, или есть надежный способ придерживаться std::string и только выставлять класс? Если char * - путь, пожалуйста, укажите синтаксис для определения ключа char *.

+0

Вы видели это, проверяя ответы в SO? http://support.microsoft.com/default.aspx?scid=KB;EN-US;168958 –

ответ

0

Вы не должны использовать char* в качестве ключа, в противном случае вы будете воспроизводить по адресу указателя в качестве ключа, а не по содержанию строки. Возможно, вам понадобится изменить ваш контейнер std::unordered_map на обычный массив [].