2013-02-25 65 views
1

我正在編寫程序,並且在嘗試使用Cygwin編譯時遇到一些奇怪的編譯器錯誤。該程序使用Visual Studio C++ Express進行編譯和運行,所以它似乎與Cygwin有關。所有的錯誤似乎都是相同的類型。下面是代碼的例子:使用Cygwin編譯時出現fstream錯誤

int count_records(void) 
{ 
EMPL_TYPE empl_rec; 
fstream empl_infile; 
empl_infile.open(filepath, ios::in|ios::binary); 
int count = 0; 
empl_infile.read((char *) &empl_rec, sizeof(empl_rec)); 
while (!empl_infile.eof()) 
{ 
    count++; 

    empl_infile.read((char *) &empl_rec, sizeof(empl_rec)); 
} 
empl_infile.close(); 
cout << "Records Counted: " << count << endl; 
return count; 
} 

,這裏是與該區段的錯誤:

Assignment2.cpp:在功能int count_records()': Assignment2.cpp:34: error: no matching function for call to的std :: basic_fstream的> ::開放(常量的std :: string & ,std :: _ Ios_Openmode)' /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/fstream:819:note:candidates are:void std :: basic_fstream < _CharT,_Traits> ::打開(const char *,std :: _ Ios_Openmode)[與_CharT = char,_Traits = std :: char_traits]

同樣,我不會收到此錯誤時co使用Visual Studio進行製作,僅限於Cygwin。如果任何人有任何想法,將不勝感激。謝謝。

回答

3

令人驚訝的是,文件流的open()方法只取得C風格的字符串,直到C++ 11標準出來。將empl_infile.open(filepath.c_str(), ios::in|ios::binary);(請注意在filepath上調用.c_str())或將-std = C++ 11替換爲Cygwin中的編譯行。

+0

大,謝謝! – 2013-02-25 17:59:47

2

這可能是因爲你在VS上支持C++ 11,而不是在Cygwin上。 fstream::open方法將const char*作爲C++ 03中的第一個參數。 C++ 11通過const std::string&提供過載。

您可以修復它像這樣

mpl_infile.open(filepath.c_str(), ios::in|ios::binary); 
+1

感謝您的回答!我希望我可以批准這兩個答案... – 2013-02-25 18:00:46