2015-10-26 102 views
3

時的錯誤,我有以下的代碼,在Visual Studio 10的作品,我想將它在Linux上 - > GCC:C++調用方法

parse(v, srcUtf8.begin(), srcUtf8.end()); <-- ERROR 

picojson.h

template <typename Iter> inline std::string parse(value& out, Iter& pos, const Iter& last) 
{ 
... 
} 

我得到這個錯誤:

error: no matching function for call to ‘parse(picojson::value&, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)’ 

note: candidates are: std::string picojson::parse(picojson::value&, Iter&, const Iter&) [with Iter = __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >] 

可否給我請一些這方面的幫助?

+0

你是如何創建'srcUtf8'的? – Soana

回答

2

的問題是,函數parse具有Iter& pos類型的第二參數是一非恆定參考

template <typename Iter> inline std::string parse(value& out, Iter& pos, const Iter& last) 

您可能沒有一個非const引用結合到臨時對象srcUtf8.begin()

嘗試以下

auto it = srcUtf8.begin(); 
parse(v, it, srcUtf8.end()); 

或者不用類型說明符auto寫e迭代器的xplicit類型。例如,如果它是類性病的迭代器::字符串,然後

std::string::iterator it = srcUtf8.begin(); 
parse(v, it, srcUtf8.end()); 

或者,如果srcUtf8是一個常量對象,然後

std::string::const_iterator it = srcUtf8.begin(); 
parse(v, it, srcUtf8.end()); 

對於MS VC++ 2010,然後它有很多bug或自己的不符合C++標準的語言擴展。

+2

你不需要這個VS的原因是因爲[擴展](http://stackoverflow.com/questions/16380966/non-const-reference-bound-to-temporary-visual-studio-bug) – NathanOliver

+0

@Vlad謝謝你的建議。嘗試自動it = srcUtf8.begin();我得到這個錯誤: '這條線上有多個標記 \t - 無法轉換'__gnu_cxx :: __ normal_iterator ,std :: allocator >>'to'int 'in \t initialization \t - 'auto'會改變C++ 0x的含義;請刪除它 \t - ISO C++禁止'it'無類型聲明 – cristian

+0

@cristian看起來您使用的編譯器不支持C++ 2011.您應該打開支持。否則,寫代替自動std :: string :: iterator –