#c #dllexport
#c #dllexport
Вопрос:
В DLL, над которой я работаю, у меня есть следующий класс, который я хотел бы экспортировать:
class A {
public:
class B
{
std:string placeholder;
};
boost::shared_ptr<B> sp;
};
С помощью этого кода мне нужно dllexport A
, A::B
и boost::shared_ptr<A::B>
. Я не могу выполнить dllexport boost::shared_ptr<A::B>
(что я должен сделать на уровне пространства имен) перед объявлением A::sp
, потому class A::B
что пока неизвестно. Объявляя это так:
class A::B;
не работает. Объявляя это так:
class B;
фактически объявляет другой класс. Как я могу это решить?
Комментарии:
1. Что вы имеете
A::B
в виду, пока не знаете?B
является ли полностью пустой класс к моменту нажатияboost::shared_ptr<B> sp;
2.@NathanOliver Мне тоже потребовалось некоторое время, чтобы разобраться. Проблема в том, что для правильной работы вам потребуется объявление области имен
template __declspec(dllexport) boost::shared_ptr<A::B>;
между объявлениемA::B
иA::sp
объявлением .3. @Angew О, здорово. Вы должны указать это в поле для ответа 🙂
4. @NathanOliver За исключением того, что это разъяснение, а не решение. Вы не можете разорвать определение класса пополам. Я просто отредактировал вопрос, чтобы, надеюсь, сделать его немного понятнее.
5. Я добавил переменную-заполнитель, поэтому
A::B
она больше не пуста.