2015-11-06 47 views
1
#include <iostream> 
#‎include‬ <fstream> 

using namespace std; 

int main() 
{ 
ofstream buckyFile; 
buckyFile.open("tuna.txt"); 
buckyFile << "Test"; 
} 

我跑在此之後,我得到「編碼錯誤」和「聚集「的std :: ofstream的buckyFile具有不完整的類型,不能被定義|」。C++使用的文件不能正常工作初學者

這是我第一次在代碼塊中使用文件,所以不要評價我。我一直在尋找一個在線解決方案,但我找不到。 請幫助

回答

3

如果您將精確給定的代碼剪切並粘貼到Visual Studio中(一個默認代碼頁1252 - 如果您在另一個代碼頁上,它可能更容易)並嘗試保存它,我會得到一個線索:

此文件中的某些Unicode字符無法保存在當前代碼頁中。

所以,文件本身明顯存在一些問題。另外一個線索是,雖然第一個#include在Visual Studio中(和在堆棧溢出代碼片段中)正確顯示顏色,但第二個不是。這似乎表明,儘管視覺工作室似乎沒問題,但它本身仍然無法解釋這條線。

這種事情通常是由「搞笑」的Unicode代碼點,如不破或零寬度的空間,或字符看起來像普通拉丁文的人,但實際上可能是希臘人或存在而引起西里爾文(或其他)。

所以,複製該行到a page that interprets Unicode strings變成了下面的代碼點:

0023 NUMBER SIGN 
200E * LEFT-TO-RIGHT MARK 
0069 LATIN SMALL LETTER I 
006E LATIN SMALL LETTER N 
0063 LATIN SMALL LETTER C 
006C LATIN SMALL LETTER L 
0075 LATIN SMALL LETTER U 
0064 LATIN SMALL LETTER D 
0065 LATIN SMALL LETTER E 
202C * POP DIRECTIONAL FORMATTING 
0020 SPACE 
003C LESS-THAN SIGN 
0066 LATIN SMALL LETTER F 
0073 LATIN SMALL LETTER S 
0074 LATIN SMALL LETTER T 
0072 LATIN SMALL LETTER R 
0065 LATIN SMALL LETTER E 
0061 LATIN SMALL LETTER A 
006D LATIN SMALL LETTER M 
003E GREATER-THAN SIGN 

我用星號標記有問題的代碼點,使其更清晰發生了什麼。這很像這條線是從一個網頁中複製粘貼的,這個網頁中有定向格式化控制字符。

因此,行本身正在導致你看到的編碼錯誤。 其他錯誤(不完整類型)無疑是由於第一個錯誤阻止了實際包含fstream標頭的事實造成的。

解決方案非常簡單,只需重新輸入當前行下方的行並刪除原始行。


獎金因果報應的人誰可以找到復活節彩蛋在上面的帖子:-)

+0

還有一個缺失的頭。 –

+0

和好的Unicode星號 –

+0

@LightnessRacesinOrbit獲獎。我認爲這會比這更難。或許我不如我想象的那麼聰明:-) – paxdiablo