2016-03-18 2 views
1

Когда эта линия не в комментариях:Compiler ошибка при объявлении переменной

double random_seed, participation_fee, ticket_revenue; 

компилятор выдает следующие ошибки:

main.cpp:24:2: error: stray ‘\200’ in program 
main.cpp:24:2: error: stray ‘\254’ in program 
main.cpp:24:2: error: stray ‘\342’ in program 
main.cpp:24:2: error: stray ‘\200’ in program 
main.cpp:24:2: error: stray ‘\254’ in program 

Я уже пытался повторно вводить эту строку. Я использую Sublime как текстовый редактор. Как решить эту проблему?

Это целая функция:

void starting_game(vector<int>&players, vector<Player*> player_obj) 
{ 

    int id, x, y, number=0; 
    char pos; 
    double random_seed,participation_fee,ticket_revenue;‬‬ 
    string input; 
    cin >> number; 
    for(int i = 0; i < number; i++) 
    { 
     cin >> id; 
     cin.ignore(4,' '); 
     cin >> x; 
     cin.ignore(2,':'); 
     cin >> y; 
     cin.ignore(2,':'); 
     cin >> pos; 
     players.push_back(find_put(id, player_obj, x, y, pos)); 
    } 
    //cin>>‫‪random_seed‬‬;//>>‫‪participation_fee‬‬>>‫‪ticket_revenue;‬‬ 
} 
+0

Это * не * дубликат связанного вопроса. Символы, о которых идет речь, являются невидимыми (* POP DIRECTIONAL FORMATTING *, U + 202c, '' "\ 342 \ 200 \ 254" '' в UTF-8), что значительно затрудняет решение. –

+0

Добро пожаловать в StackOverflow. Я отредактировал ваше сообщение, чтобы сделать его более читаемым. Чтобы избежать попадания вниз в будущее, будьте внимательны при написании сообщения. Хороший язык часто помогает людям серьезно относиться к вашему вопросу и отвечать на него. –

+0

Скопируйте и вставьте весь контент в текстовый редактор, а затем обратно. – ZDF

ответ

2

Вы невидимые символы внутри вашего кода, который остановить компилятор правильно работать, потому что он не может справиться с ними.

В вашем конкретном случае одним из этих символов является U + 202c, закодированный с использованием UTF-8. Он называется «POP DIRECTIONAL FORMATTING» и невидим.

Будучи невидимым, фиксация будет сложной. Даже код в вопросе содержит этот символ.

Чтобы исправить это, вы можете сделать некоторые из следующих действий:

  • Попробуйте удалить всю строку, а также следующую строку, и перепечатывать текст. В вашем конкретном случае символы задерживаются в конце строки и могут быть сохранены, если вы просто удалите строку и повторите ее, не убивая также линию. (через @PatrickTrentin)

  • Используйте сценарий, который удаляет все символы, отличные от ascii. Это легко сделать с помощью python. Вставьте следующий код в текстовый файл script.py и выполните его, используя python3.

    #!/usr/bin/python3 
    import argparse 
    import sys 
    
    parser = argparse.ArgumentParser() 
    
    parser.add_argument("infile", type=argparse.FileType("rb")) 
    parser.add_argument("outfile", type=argparse.FileType("wb")) 
    
    args = parser.parse_args() 
    
    with args.infile as inf: 
        intext = inf.read().decode("utf-8") 
        with args.outfile as outf: 
         outf.write("".join(
          c for c in intext 
          if ord(c) <= 127 
        ).encode("utf-8")) 
    

    Использование python3 script.py input output. Do не введите одно и то же имя дважды, это не сработает, и вы получите пустой файл. В любом случае сделайте резервную копию своих файлов, прежде чем пытаться это сделать!

  • Используйте шестнадцатеричный редактор, чтобы вручную избавиться от всех символов, отличных от ASCII. К сожалению, я не знаю никого, который прост в использовании.

В этом случае удаление символов без замены - это правильная вещь. В других случаях (например, proposed duplicate) правильнее заменить обидающие символы чем-то более подходящим. Здесь не так.

+1

Решение так же просто, как переписать 'double random_seed, Particip_fee, ticket_revenue;' вручную и удалить всю строку с зловещими скрытыми кодами, используя, например, 'ctrl + k' в nano ..[eta: i down downvote] –

+0

@PatrickTrentin Согласно OP, это не помогло. Это может быть связано с тем, что коды фактически находятся на конце строки, в зависимости от редактора. Учитывая, что другие прокомментированные строки имеют одинаковую проблему, автоматическое решение показалось подходящим ☺ –

+1

вправо, трюк заключается в использовании редакторов, которые позволяют сразу удалить всю строку, например. 'nano, vim и т. д .'. Я попробовал это сам по его коду. Я думаю, что ваш ответ - хороший ответ, просто хотел указать самый простой путь. :) –

Смежные вопросы