2012-06-25 2 views
4

Possible Duplicate:
std::vector needs to have dll-interface to be used by clients of class 'X<T> warningпредупреждение C4251: необходимо иметь длл-интерфейс, который будет использоваться клиентами класса

Это мой первый пост в этой группе.

Я создаю DLL и вызываю его в основной файл приложения. Код компилируется нормально, но я получаю следующее сообщение об ошибке:

warning C4251: 'PNCBaseClass::m_vAvailChannelsFromRx' : class 'std::vector<_Ty>' needs to have dll-interface to be used by clients of class 'PNCBaseClass' 
3>   with 
3>   [ 
3>    _Ty=int 
3>   ] 

Мой код выглядит следующим образом:

#define TEST_API __declspec(dllexport) 
class TEST_API PNCBaseClass 
{ 
public: 
vector<int> m_vAvailChannelsFromRx 
}; 

Я смотрел на решения и пытались и потерпели неудачу.

Я не хочу отключать предупреждение.

+0

Также это - http://stackoverflow.com/questions/767579/exporting-classes-containing-std-objects-vector-map-etc-from-a-dll –

+0

Я удивлен, что они не придумали как предложения ... –

+0

и этот http://stackoverflow.com/a/4563701/400303 – Mohammad

ответ

8

Никогда не храните STL-контейнеры в качестве экспортированных членов класса. Клиентское приложение может быть скомпилировано с другой версией STL, чем ваша, с неопределенным временем выполнения. В вашем случае легко заменить вектор < int> элемент с указателем вектора < int> *. Инициализируйте его в конструкторе класса и отпустите в деструкторе класса.

+0

Спасибо Алекс. Я не специалист по кодированию. Я попробовал, что ты сказал, но я все еще получаю предупреждение. Поэтому в конструкторе я сделал m_vAvailChannelsFromRx.push_back (0), а в деструкторе я просто очистил переменную. –

+0

Это означает, что вы не пробовали точно, что я предложил. Во всяком случае, вопрос закрыт. –

+0

Ну, я сделал следующее в конструкторе y = new std :: vector () и удалил y в деструкторе. –

Смежные вопросы

 Смежные вопросы