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

using namespace std; 

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

После того как я запускаю это, я получаю «Encoding Error» и «заполнитель„станд :: ofstream buckyFile“имеет неполный тип и не может быть определен |».C++ Использования файлов не работает начинающие

Это мой первый опыт использования файлов в кодовых блоках, поэтому не судите меня. Я искал решение в Интернете, но не смог найти. Пожалуйста, помогите

ответ

3

Если вы вырезаете и вставляете этот точный код в Visual Studio (один по умолчанию на странице кода 1252 - если вы находитесь на другой кодовой странице, это может быть более прощающим) и попытаться сохранить его, Получите ключ:

Некоторые символы Юникода в этом файле не могут быть сохранены в текущей кодовой странице.

Таким образом, в самом файле есть что-то, что вызывает проблему. Еще одна подсказка будет заключаться в том, что, хотя первый #include правильно отображен в Visual Studio (и в фрагменте кода переполнения стека), второй - нет. Это, по-видимому, указывает на то, что сама 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 был включен.

Решение довольно простое, просто введите строку под текущим и удалите оригинал.


Bonus карма для всех, кто может найти пасхальное яйцо в посте выше :-)

+0

Там также отсутствует заголовок. –

+0

И хорошая юникодная звездочка –

+0

@LightnessRacesinOrbit выигрывает приз. Я думал, что это будет тяжелее. Возможно, я менее умный, чем я думал :-) – paxdiablo