【发布时间】:2010-09-21 04:01:57
【问题描述】:
在与Boost.Asio的殊死搏斗中,我遇到了很多困难。
其中之一是我几乎无法定位“boost::noncopyable 错误”在哪里!!
如果我不小心违反了不可复制的规定,IDE 只会在 noncopyable.hpp 或其他地方显示一些错误,但在我的文件中没有任何地方。
我只能在所有存在 asio 对象的地方通过注释和取消注释来查找错误。
(ps:我的IDE是visual c++ 2008,这个IDE是不是跟Boost关系不好??)
编辑:
我知道阅读整个错误信息会有很大帮助。 但是这个怎么样?
1>d:\boost\include\boost-1_42\boost\asio\basic_io_object.hpp(92) : error C2248: 'boost::noncopyable_::noncopyable::noncopyable' : cannot access private member declared in class 'boost::noncopyable_::noncopyable'
1> d:\boost\include\boost-1_42\boost\noncopyable.hpp(27) : see declaration of 'boost::noncopyable_::noncopyable::noncopyable'
1> d:\boost\include\boost-1_42\boost\noncopyable.hpp(22) : see declaration of 'boost::noncopyable_::noncopyable'
1> This diagnostic occurred in the compiler generated function 'boost::asio::basic_io_object<IoObjectService>::basic_io_object(const boost::asio::basic_io_object<IoObjectService> &)'
1> with
1> [ IoObjectService=boost::asio::stream_socket_service<boost::asio::ip::tcp> ]
都是这个原因造成的
tcp::socket getSocket(){
return m_socket;
}
(应该是:
tcp::socket& getSocket(){
return m_socket;
}
)
当那个文件里有很多个函数的时候,你们能快点找到吗??
(ps2:也许所有这些麻烦都是我糟糕的c++编程经验造成的??)
【问题讨论】:
-
阅读整个错误消息通常会有所帮助...阅读 James McNellis 的答案。编译器通常会提供更好的错误报告,我们愿意阅读,而且这样做很多时候会掩盖实际错误……但这是另一回事。
-
我承认问的问题太抽象了...并编辑了它。