[英]How to locate “boost::noncopyable” errors?
在與Boost.Asio的絕望戰斗中,我遇到了很多困難。
其中之一就是我幾乎找不到 “boost :: noncopyable errors”的位置!
如果我意外違反了不可復制的規定,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:也許所有這些麻煩都是由我的pooooooor c ++編程經驗引起的?)
似乎VC ++根本不會告訴你使用復制構造函數的嘗試在哪里。
例如,G ++會:
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
class X
{
tcp::socket s;
public:
tcp::socket get() { return s; }
};
結果是:
blah blah blah noncopyable blah blah
...
untitled1.cpp: In member function 'boost::asio::blah blah X::get()':
untitled1.cpp:8: note: synthesized method 'boost::asio::blah(const boost::asio::blah&)' first required here
有幾次我剛剛設法用GCC編譯源代碼來找出VC ++的錯誤信息(反之亦然)。
也許不編寫很多非工作代碼而不嘗試偶爾編譯它。
我最近與一個類似的問題進行了斗爭,其中不可復制的項目是我想通過引用返回的類的成員。
我通過將復制構造函數設置為幾個可疑類的私有來跟蹤它,並以這種方式找到了問題。
如果您返回不可復制的boost類實例,那么幫助不大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.