C ++使用不适合初学者的文件

时间:2015-11-06 09:54:55

标签: c++

#include <iostream>
#‎include‬ <fstream>

using namespace std;

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

运行之后,我得到“编码错误”和“聚合'std :: ofstream buckyFile'的类型不完整,无法定义|”。

这是我第一次在代码块中使用文件,所以不要评判我。我一直在寻找在线解决方案,但我找不到。 请帮忙

1 个答案:

答案 0 :(得分:3)

如果你将确切的给定代码剪切并粘贴到Visual Studio中(一个默认代码页1252 - 如果你在另一个代码页上,它可能更宽容)并尝试保存它,你&#39;我得到一个线索:

  

此文件中的某些Unicode字符无法保存在当前代码页中。

因此,文件本身显然存在导致问题的原因。另一个线索是,虽然第一个#include在Visual Studio(以及Stack Overflow代码段)中正确地进行了颜色渲染,但第二个却没有。这似乎表明Visual Studio本身在解释该行时遇到了麻烦,尽管看起来没什么问题。

这种事情通常是由于&#34;搞笑&#34; 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标头这一事实造成的。

解决方案非常简单,只需重新键入当前行下的行并删除原始行。

在任何可以在上述帖子中找到复活节彩蛋的人获得业力奖励: - )