Ошибка: нет совпадения для 'operator >>' в 'std :: cin

0

Я вернулся с другим, вероятно, вопросом. хР

Поэтому у меня есть это на данный момент.

#include <iostream>

using namespace std;

int main()
{
    string input;

    int man;

    cout<<"Choose your Character- 1.Sven or 2.Macy: ";
    cin>>input;
    cin.ignore();

    if ( input == "Sven" ){
        cout<<"Welcome to CRPG, my good Sir!";
        return 0;
        cin>>"Sven starts his journey at the Forest of Despair. At the beginning of the path, a fork in the road sits in his way. Which path shall you take? L or R?";
    }

    else if ( input == "Macy" ){
        cout<<"Girls cant fight, go back: ";
    }
}

Да, я видел и читал другие сообщения об этой же проблеме, но никто не обращался ко мне. Так каким образом я мог бы это исправить?

  • 8
    Во-первых, #include <string> если вы хотите использовать std::string . Во-вторых, что означает чтение строкового литерала (мертвый код, но в любом случае неправильный)?
Теги:
compiler-errors

3 ответа

2

Вы должны включить заголовок <string>

#include <string>

Этот заголовок содержит объявление operator >> для объектов типа std::string

Также в этом утверждении

   cin>>"Sven starts his journey at the Forest of Despair. At the beginning of the path, a fork in the road sits in his way. Which path shall you take? L or R?";

у вас есть опечатка. Должен быть cout << вместо cin >>

2

Основная проблема заключается в этой строке кода:

cin>>"Sven starts his journey at the Forest of Despair. <blah blah blah>";

Конечно, cin не предлагает operator>> поэтому код не скомпилируется с сообщением об ошибке. Но предположим, что на секунду это обеспечило такой оператор. Что означал бы ваш код? Вы пытаетесь прочитать что-то в строковый литерал (то есть что-то типа const char[N] где N - длина строки), которая является постоянной и не может быть изменена.

Поскольку вы хотите что-то написать на выходе (вместо того, чтобы читать что-то из ввода), вы должны использовать cout << вместо этого.

Также обратите внимание, что у вас есть return 0 которое предотвратит выполнение оператора, так как выполнение main остановится после того, как этот оператор встретится.


Обновление: в комментариях обратите внимание, что вы не #include <string> несмотря на то, что вы используете std::string в своей программе. Хотя вы можете избежать этого, вы не должны полагаться на это поведение, и вы должны явно включать то, что вы используете. Несоблюдение этого может, как предложили Slava и MooingDuck, привести к ошибкам, аналогичным тому, что вы сообщили.

  • 3
    Отсутствие #include <string> также может быть причиной (возможно, скомпилируется на некоторых компиляторах)
  • 0
    Сомнительно. Он бы получил ошибку раньше, когда объявит string input .
Показать ещё 2 комментария
1

В этом случае вы правильно использовали cin:

cin>>input;
cin.ignore();

Почему бы не сделать то же самое здесь?

string direction 
cout << "Sven starts his journey at the Forest of Despair. At the beginning of the path, a fork in the road sits in his way. Which path shall you take? L or R?";
cin >> direction

//do whatever you want to do with direction

РЕДАКТИРОВАТЬ:

Поэтому у вас есть

return 0;

Это не позволяет программе ничего делать после этой строки, потому что вы возвращаетесь сюда.

  • 0
    Отличное место return 0 вещь. Мои глаза сканировали мимо , что и к cin ниже!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню