免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5830 | 回复: 3
打印 上一主题 下一主题

求排错,用了boost::mutex之后就编译不过 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-13 10:22 |只看该作者 |倒序浏览
  1. #include <iostream>
  2. #include <deque>
  3. using namespace std;
  4. #include <boost/thread/thread.hpp>
  5. // 基本消息对象
  6. typedef struct
  7. {
  8. int messageId;        // 若Id为0则为无效消息
  9. }RobotMessage;

  10. // 消息对列对象
  11. class RobotMessageQueue
  12. {                             // 编译错误说的第17行
  13.     private:
  14. // 消息对了未定义
  15. boost::mutex        messageQueueMutex; // 用来保护消息对列的读写,就是加上这句总是编译不过
  16.     public:
  17. void AppendMessage(RobotMessage message);  // 消息入队
  18. void ProvideMessage(RobotMessage * message);// 消息出队
  19. };

  20. void RobotMessageQueue::AppendMessage(RobotMessage message)
  21. {

  22. //boost::mutex::scoped_lock lock(this->messageQueueMutex);
  23. return;
  24. }

  25. void RobotMessageQueue::ProvideMessage(RobotMessage * message)
  26. {
  27. //boost::mutex::scoped_lock lock(this->messageQueueMutex);
  28. // ....
  29. return;
  30. }

  31. class RobWen  // 机器人对象
  32. {
  33.     private:
  34. RobotMessageQueue speakMessageQueue;
  35. boost::thread    *sensingThread;     // 一个感知线程
  36. boost::thread     *speakingThread;  // 一个语音线程

  37.     public:
  38. RobWen();
  39. ~RobWen();
  40. void Read();  // 感知线程函数,发送消息入队
  41. void Speak(); // 语音线程函数,提取消息出队

  42. };


  43. RobWen::RobWen()
  44. {
  45. sensingThread = new boost::thread(boost::bind(&RobWen::Read, this));

  46. speakMessageQueue = RobotMessageQueue();  // 这一句也总是报错,编译错误说的第57行
  47. speakingThread = new boost::thread(boost::bind(&RobWen::Speak, this));
  48. }

  49. RobWen::~RobWen()
  50. {
  51. delete    sensingThread;
  52. delete    speakingThread;
  53. }

  54. void RobWen::Read()
  55. {
  56. while(true)
  57.     {
  58.    
  59.         RobotMessage message;
  60.         message.messageId = 1;
  61.         speakMessageQueue.AppendMessage(message);
  62.     }

  63. return;
  64. }


  65. void RobWen::Speak()
  66. {

  67. while(true)
  68.      {
  69.     // handle the message
  70.     RobotMessage message;
  71.     this->speakMessageQueue.ProvideMessage(&message);
  72.     if(message.messageId != 0)
  73.         {
  74.         cout << "收到消息,Id:" << message.messageId << endl;   
  75.         }
  76.      }

  77. }
复制代码
把编译和错误代码也贴上来吧~~
  1. g++ -c -o errorTest RobWen2_edit.cc
  2. In file included from /usr/include/boost/thread/mutex.hpp:16,
  3.                  from /usr/include/boost/thread/pthread/thread_data.hpp:12,
  4.                  from /usr/include/boost/thread/thread.hpp:17,
  5.                  from RobWen2_edit.cc:8:
  6. /usr/include/boost/noncopyable.hpp: In member function ‘boost::mutex& boost::mutex::operator=(const boost::mutex&)’:
  7. /usr/include/boost/noncopyable.hpp:28: error: ‘const boost::noncopyable_::noncopyable& boost::noncopyable_::noncopyable::operator=(const boost::noncopyable_::noncopyable&)’ is private
  8. /usr/include/boost/thread/pthread/mutex.hpp:31: error: within this context
  9. RobWen2_edit.cc: In member function ‘RobotMessageQueue& RobotMessageQueue::operator=(const RobotMessageQueue&)’:
  10. RobWen2_edit.cc:17: note: synthesized method ‘boost::mutex& boost::mutex::operator=(const boost::mutex&)’ first required here
  11. RobWen2_edit.cc: In constructor ‘RobWen::RobWen()’:
  12. RobWen2_edit.cc:57: note: synthesized method ‘RobotMessageQueue& RobotMessageQueue::operator=(const RobotMessageQueue&)’ first required here   
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-06-13 11:03 |只看该作者
g++ -c -o errorTest RobWen2_edit.cc -pthread

论坛徽章:
0
3 [报告]
发表于 2011-06-13 19:22 |只看该作者
回复 1# trypsin


  boost::mutex 是 集成noncopyable, 是不允许复制的(想想,本来也没办法复制)
问题出在56行
speakMessageQueue = RobotMessageQueue();  // 这一句也总是报错,编译错误说的第57行

这一行纯属画蛇挺足,去掉就可以了

论坛徽章:
0
4 [报告]
发表于 2013-04-28 14:12 |只看该作者
我也和你的问题一样,总是加了boost::mutex成员变量后就不能通过编译,你最后是怎么解决的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP