Что означает {error C2338: (boost:: has_trivial_destructor<T>:: value)} для boost::lockfree::queue? Что мне здесь не хватает?
У меня есть структура MyClass
внутри другого класса MyOuterClass
Я пытаюсь поместить в boost::lockfree::queue. Моя структура выглядит ниже
struct MyClass
{
MyClass() {}
MyClass(const string& topic, const string& multicastChannel, const string& netInterface, MyOuterClass::MY_COMMAND_ENUM command, MyOuterClass::CallbackType callback)
:topic(topic), multicastChannel(multicastChannel), netInterface(netInterface), command(command), callback(callback) {}
MyClass(const MyClass& src)
:topic(src.topic), multicastChannel(src.multicastChannel), netInterface(src.netInterface), command(src.command), callback(src.callback) {}
MyClass& operator=(const MyClass& src)
{
topic = src.topic;
multicastChannel = src.multicastChannel;
netInterface = src.netInterface;
command = src.command;
callback = src.callback;
}
~MyClass(){}
string topic;
string multicastChannel;
string netInterface;
MyOuterClass::MY_COMMAND_ENUM command;
MyOuterClass::CallbackType callback;
};
Мой внешний класс имеет открытую переменную-член boost::lockfree::queue<MyClass> m_commandQueue;
который выдает следующую ошибку, когда я пытаюсь скомпилировать.
1>------ Build started: Project: MDServices, Configuration: Debug x64 ------
1>Build started 6/10/2013 4:41:00 PM.
1>InitializeBuildStatus:
1> Touching "x64\Debug\MDServices.unsuccessfulbuild".
1>ClCompile:
1> MyOuterClass.cpp
1>C:\local\boost_1_53_0\boost/lockfree/queue.hpp(79): error C2338: (boost::has_trivial_destructor<T>::value)
1> src\MyOuterClass.cpp(70) : see reference to class template instantiation 'boost::lockfree::queue<T>' being compiled
1> with
1> [
1> T=MDServices::MyClass
1> ]
1>C:\local\boost_1_53_0\boost/lockfree/queue.hpp(83): error C2338: (boost::has_trivial_assign<T>::value)
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:03.38
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Я проверил поток /boost/lockfree/queue.hpp: ошибка: статическое утверждение не удалось: (boost:: has_trivial_destructor
Благодарю.
Chinmay
1 ответ
Решение
Согласно комментариям JesseGood на мой вопрос, проблема была вызвана использованием std::string
в MyClass
что нетривиально. Решением было хранить указатели на MyClass
в моем boost::lockfree::queue
вместо MyClass
объекты напрямую.