Оператор сравнения == не работает, как мне заставить его работать? [CPP] - PullRequest
2 голосов
/ 03 апреля 2011

Я получаю следующую ошибку:

C:\Users\*******\Documents\CodeBlocksProjects\encryptText\main.cpp||In function 'int main()':|
C:\Users\*******\Documents\CodeBlocksProjects\encryptText\main.cpp|14|error: no match for 'operator==' in 'givenText == 1'|
C:\Users\*******\Documents\CodeBlocksProjects\encryptText\main.cpp|25|error: no match for 'operator==' in 'givenText == 2'|
||=== Build finished: 2 errors, 0 warnings ===|

Используя следующий код:

#include <iostream>
#include <string>
#include "encrypt.h"
#include "decrypt.h"


using namespace std;

int main() {
startOver:
    string givenText, pass;
    cout << "Encrypt (1) or Decrypt (2)?" << endl << "Choice: ";
    getline(cin, givenText);
    if (givenText == 1) {
        cout << endl << "Plain-Text: ";
        getline(cin, givenText);
        cout << endl << "Password: ";
        getline(cin, pass);
        cout << endl << encrypt(givenText, pass) << endl << "Restart? (Y/N)";
        getline(cin, givenText);
        if (givenText == "Y") {
            cout << endl;
            goto startOver;
        }
    } else if (givenText == 2) {
        cout << endl << "Ciphered-Text: ";
        getline(cin, givenText);
        cout << endl << "Password: ";
        getline(cin, pass);
        cout << endl << decrypt(givenText, pass) << endl << "Restart? (Y/N)";
        getline(cin, givenText);
        if (givenText == "Y") {
            cout << endl;
            goto startOver;
        }
    } else {
        cout << endl << "Please input 1 or 2 for choice." << endl;
        goto startOver;
    }

    return 0;
}

Я думал, что это будет так же просто, как сортировка if (x == y)из вещей, но я думаю, нет.Что я должен сделать, чтобы это исправить?Спасибо заранее!

Ответы [ 4 ]

3 голосов
/ 03 апреля 2011

не может сравнивать строку с int напрямую. используйте кавычки вокруг чисел.

2 голосов
/ 03 апреля 2011

Тип данных на givenText является строкой.Вы сравниваете это с целым числом.

Есть два способа решения этой проблемы, простой:

if (givenText == "1")

, который примет 1 в качестве строки.

Другой вариант (который будет работать с 1, 01, 0randomCharacters01 и т. Д.): int givenTextInt = atoi(givenText.c_str());

И теперь вы можете сравнить это так:

 if (givenTextInt == 1)
2 голосов
/ 03 апреля 2011

Нет неявного преобразования типов для вашей строки, поэтому вам нужно либо:

a) изменить тест для сравнения строк: if (данноеText == "1")

или

b) перед сравнением: передайте заданный текст в целое число: if (atoi (данноеText.c_str ()) == 1)

Получайте удовольствие!

1 голос
/ 03 апреля 2011

1 и 2 - целые числа, их нельзя сравнить со строкой.Вместо этого сравните «1» и «2».

...