2015-11-06 62 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