Компилятор Visual Studio 2010 C ++ выделяет неправильный размер для класса - PullRequest
3 голосов
/ 25 декабря 2011

В настоящее время я экспортирую несколько классов из DLL через dllexport и делаю свои закрытые члены приватными, чтобы заголовки, которые я предоставляю для DLL, не включали ничего приватного.

Проблема в том, что теперь компилятор не знает о размере класса, думает, что я выделяю пустой класс (размер 1 байт), разве эта информация не должна быть доступна в .lib, сгенерированном с помощью DLL? Я не могу скрыть личные данные?

Для ясности, заголовки DLL экспортируют весь класс, используя __declspec (dllexport) и заголовки развертывания __declspec (dllimport)

1 Ответ

4 голосов
/ 25 декабря 2011

Вы не можете сделать это по причине, которую вы только что узнали. Ваш класс без его частных участников не совпадает с вашим классом с его частными членами. Компилятор не выделяет неправильный размер, вы играете с двумя разными классами с одинаковыми именами.

Используйте что-то вроде идиомы pimpl, чтобы скрыть ряды вашего класса. (См. непрозрачные указатели и идиома быстрого pimpl ).

...