c++ - {error C2338: (boost::has_trivial_destructor<T>::value)} 对于 boost::lockfree::queue 意味着什么?我在这里缺少什么?

标签 c++ boost 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;
};

我的外部类有一个公共(public)成员变量 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: error: static assertion failed: (boost::has_trivial_destructor<T>::value)但是我仍然无法编译。我在这里缺少什么?

谢谢。

钦梅

最佳答案

根据 JesseGood 对我的问题的评论,该问题是由于在 MyClass 中使用 std::string 引起的,这并不简单。解决方案是在我的 boost::lockfree::queue 中存储指向 MyClass 的指针,而不是直接存储 MyClass 对象。

关于c++ - {error C2338: (boost::has_trivial_destructor<T>::value)} 对于 boost::lockfree::queue 意味着什么?我在这里缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032725/

相关文章:

c++ - 试图在类中使用 boost::spirit::qi 解析器的段错误

java - 在 Java 中实现固定大小的非阻塞队列的最有效方法是什么?

c - Typedef 结构导致程序崩溃

c++ - 提出链表的简单公式

c++ - 具有元素的自定义构造函数的对象数组/vector

c++ - 如何使用 IDirectManipulationViewport::SetViewportRect?

c++ - 单击标题栏按钮时,全局低级鼠标钩子(Hook)会导致卡住

c++ - 在 C++ 中调用继承的类特定函数

c++ - 为什么 boost::auto_cpu_timer 显示 > 100% 利用率?

multithreading - 程序失败时保存队列值的最佳方法