2014-03-18 32 views
3

每當我在ubuntu上用g ++編譯我的代碼時,我得到這個錯誤: /usr/include/boost/smart_ptr/detail/shared_count.hpp:453:26:error:'class boost :: detail: :sp_counted_base」沒有名爲成員 'get_untyped_deleter'Boost get_untyped_deleter錯誤

這裏是我的代碼:

#include <iostream> 
#include <boost/asio.hpp> 
#include <boost/date_time/posix_time/posix_time.hpp> 

void print(const boost::system::error_code& /*e*/) 
{ 
    std::cout << "Hello, world!\n"; 
} 

int main() 
{ 
    boost::asio::io_service io; 

    boost::asio::deadline_timer t(io, boost::posix_time::seconds(5)); 
    t.async_wait(&print); 

    io.run(); 

    return 0; 
} 

和我的方式運行它是這樣的:

g++ main.cpp -o main 

我正在提升1.55(洛杉磯測試到這個日期) 是怎麼回事?

在此先感謝

+0

什麼是g ++版本?你確定你不混合不同的Boost版本嗎? –

回答

0

我的主要問題似乎是已經安裝升壓1.49(之間的衝突哪一個程序已經安裝在我的電腦中)和Boost 1.55。 我卸載了Boost 1.55並且離開了1.49,現在一切都正常了

0

爲了詳細說明伊戈爾的r評論,很可能你已經結束了在你的盒子提升的只是局部安裝,您可能已丟失的文件或GCC最終採取位並根據其標準包括來自不同路徑的碎片。

如果您運行g++ -H main.cpp -o main您應該能夠追蹤特定包含的情況。例如:

$ g++ -H -c main.cpp -o main 2>&1 | grep sp_counted 
............. /usr/include/boost/smart_ptr/detail/sp_counted_base.hpp 
.............. /usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp 
............. /usr/include/boost/smart_ptr/detail/sp_counted_impl.hpp 

正如你所看到的,在我的盒子,它需要一切從標準包括路徑,這是偶然我所期望的,它是默認提升(對我來說不是1.55)。

如果我想我的G ++指向一個特定的提升版本,我可以只使用-I覆蓋默認的喜好,

$ g++ -H -c main.cpp -o main -I/opt/dev/boost_1_55_0 2>&1 | grep sp_counted 
............ /opt/dev/boost_1_55_0/boost/smart_ptr/detail/sp_counted_base.hpp 
............. /opt/dev/boost_1_55_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp 
............ /opt/dev/boost_1_55_0/boost/smart_ptr/detail/sp_counted_impl.hpp