2015-10-23 74 views
0

我有以下情形,在工作的Visual C++ 10,但在Linux上不能與GCC:參數高清

電話:

value& v; 
wstring fn(L""); 
char_conv::str_to_wstr(path, fn); 

parse(v, ifstream(fn.c_str())); //<-- ERROR 

本功能高清:

inline std::string parse(value& out, std::istream& is){...} 

這是錯誤我得到:

In member function ‘std::string PrintInvoker::extractParameter(const std::string&, picojson::value&)’: 
error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const wchar_t*)’ 
+1

'ifstream'只是不接受寬字符串:HTTP:// EN .cppreference.com/w/cpp/io/basic_ifstream/basic_ifstream – Lol4t0

+0

您還試圖將臨時綁定到非const的左值引用,這是不允許的。 – emlai

回答

1

std::idstream有以下構造函數:

basic_ifstream(); 
explicit basic_ifstream(const char* filename, 
      ios_base::openmode mode = ios_base::in); 

explicit basic_ifstream(const string& filename,         
      ios_base::openmode mode = ios_base::in); 

basic_ifstream(basic_ifstream&& other); 

basic_ifstream(const basic_ifstream& rhs) = delete; 

現在當你調用fn.c_str()返回一個wchar_t*因爲fn是一個wstrgin。正如你所看到的,沒有任何超載需要wchar_t*,所以編譯器給你一個錯誤。

看着我MSVS2015的副本看來,微軟又增加了一個構造函數,它確實需要一個wchar_t*所以這就是爲什麼它的作品在那裏,

+0

謝謝你的解釋。有一種方法可以通過idstream的構造函數轉換爲所需的類型。還是其他解決方案 – cristian

+1

@cristian要麼將'fn'改爲'std :: string',要麼將其轉換爲:http://stackoverflow.com/questions/4804298/how-to-convert-wstring-into-string – NathanOliver