首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

boost:asio:io_service的初始化解决方法

2012-03-17 
boost::asio::io_service的初始化在boost_1_39_0\boost\asio\io_service.hpp里的定义是class io_service:

boost::asio::io_service的初始化
在boost_1_39_0\boost\asio\io_service.hpp里的定义是
class io_service
  : private noncopyable

而noncopyable的拷贝赋值是私有成员
class noncopyable
  {
  protected:
  noncopyable() {}
  ~noncopyable() {}
  private: // emphasize the following members are private
  noncopyable( const noncopyable& );
  const noncopyable& operator=( const noncopyable& );
  };
也就是说io_service是不能拷贝赋值的
但是asio的例子里都是这样的代码:
class A
{
io_service &io;
public:
A(io_service&io_):io(io_)
  {
  }
}
这是为什么?
我一开始也没注意,但是后来自己写的时候不知道怎么就编译报错了。
error C2248: “boost::noncopyable_::noncopyable::noncopyable”: 无法访问 private 成员(在“boost::noncopyable_::noncopyable”类中声明)
1> f:\boost_1_39_0\boost\noncopyable.hpp(27) : 参见“boost::noncopyable_::noncopyable::noncopyable”的声明
1> f:\boost_1_39_0\boost\noncopyable.hpp(22) : 参见“boost::noncopyable_::noncopyable”的声明
1> 此诊断出现在编译器生成的函数“boost::asio::io_service::io_service(const boost::asio::io_service &)”中

[解决办法]
是我眼花了?
io_service &io;

不是拷贝,这只是一个引用
帖编译过不去的代码吧。
[解决办法]
写了一个测试代码,编译通过,没出现你说的问题。

C/C++ code
#include <iostream>#include <boost/thread.hpp>#include <boost/asio.hpp>using namespace std;using namespace boost;using namespace boost::asio;class A{    io_service& io;public:    A(io_service& io_): io(io_)    {    }};int main(){    io_service io;    A a(io);    return 0;}
[解决办法]
所以,你的问题应该是没有使用引用,而是使用了拷贝。比如:
C/C++ code
class A{    io_service io;public:    A(io_service io_): io(io_)    {    }};
[解决办法]
io_service &io;
这里只是使用了应用,你的构造函数初始化列表给这个引用赋值,没有调用拷贝构造函数。是可以的。

热点排行