2013-01-20 38 views
5

我在Eclipse CDT(朱諾SR1)下面的代碼:虛假的錯誤在Eclipse CDT:升壓:: iostreams的

#include <fstream> 
#include <iostream> 

#include <boost/iostreams/filter/gzip.hpp> 
#include <boost/iostreams/filtering_streambuf.hpp> 
#include <boost/iostreams/copy.hpp> 

int main() 
{ 
    using namespace std; 
    namespace io = boost::iostreams; 

    ifstream file("data.gz", ios_base::in | ios_base::binary); 
    io::filtering_streambuf<io::input> in; 
    in.push(io::gzip_decompressor());  // error here 
    in.push(file);       // and here 
} 

g++ 4.7.2與代碼沒有問題。然而,Eclipse卻抱怨兩條in.push()這兩條線。錯誤消息在兩種情況下都是相同的:

Invalid arguments ' 
Candidates are: 
void push(std::basic_streambuf<#10000,#10001> &, ?, ?) 
void push(std::basic_istream<#10000,#10001> &, ?, ?) 
void push(std::basic_ostream<#10000,#10001> &, ?, ?) 
void push(std::basic_iostream<#10000,#10001> &, ?, ?) 
void push(const boost::iterator_range<#10000> &, ?, ?) 
void push(const boost::iostreams::pipeline<#10000,#10001> &) 
void push(const #10000 &, ?, ?, boost::disable_if<boost::iostreams::is_std_io<#10000>,void>::type *) 
' 

如何修復或解決此問題以停止CDT抱怨?

+0

hm奇怪:我知道CDT在幾個增強功能方面有一些問題......但所有這些都是現在修復的。你可以嘗試禁用「代碼分析」功能,或重建你的項目索引? – Najzero

+1

重建項目指標沒有區別。禁用代碼分析可以阻止CDT投訴;不過,如果可能的話,我寧願保留代碼分析。 – NPE

+1

我期望的是std :: ifstream被隱式轉換爲它的基類std :: istream,以便第二個候選匹配。我會嘗試將'static_cast (file)'傳遞給push()函數。如果這不起作用,我能想象的唯一事情就是模板參數不匹配,但那將是一個非常奇怪的錯誤。另一方面,我還沒有和CDT合作過,所以很難說。 –

回答

0

我在Juno SR2中看不到這個問題,所以假設你使用的所有插件都與最新的SR兼容,最簡單的解決方案可能是更新你的Eclipse安裝。