簡體   English   中英

如何找到“boost :: noncopyable”錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM