Greyer Sting
Greyer Sting

Reputation: 85

tictactoe game No operator "==" matches these operands

It is probably very inefficient and messy but here is my problem- Where it says stuff like "zz == defo && zo == defo" The equals is underlined in red saying Error: no operator "==" matches these operands and when I run I get an error that is too long to post here- http://pastebin.com/KTEM0MZK

What am I doing wrong? Thanks in advance

Here is my code-

#include <iostream>
#include <cstdlib> // for rand() and srand()
#include <ctime> // for time()
using namespace std;

string random1(){
    srand(((time(0) - 23) * time(0)) - (9*time(0)));
  if (rand() % 2 == 0){
    return "1";
        } else {
            return "0";
        }
}
string random2(){
    srand((((time(0) - 89) * time(0)) - (9*time(0)) / 3) - 99);
  if (rand() % 2 == 0){
    return "1";
        } else {
            return "0";
        }
}
int main(){
    string zz = "-";
    string zo = "-";
    string zt = "-";
    string oz = "-";
    string oo = "-";
    string ot = "-";
    string tz = "-";
    string to = "-";
    string tt = "-";
    for(int a = 1;a<=9;a++){
        srand ( time(NULL) - 8 );
        int ran1 = rand() % 3;  
        srand ( time(NULL) * 2);
        int ran2 = rand() % 3;
        int tote = (ran1 * 10) + ran2;
        cout << endl << "format- 0 = zero, 1 = one, 2 = two" << endl;
        int input;
        cin >> input;
        if(input == 00){
            zz = "X";
        } else if(input == 01){
            zo = "X";
        } else if(input == 02){
            zt = "X";
        } else if(input == 10){
            oz = "X";
        } else if(input == 11){
            oo = "X";
        } else if(input == 12){
            ot = "X";
        } else if(input == 20){
            tz = "X";
        } else if(input == 21){
            to = "X";
        } else if(input == 22){
            tt = "X";
        }
        // now for the computers part
        if(tote == 00){
            zz = "O";
        } else if(tote == 01){
            zo = "O";
        } else if(tote == 02){
            zt = "O";
        } else if(tote == 10){
            oz = "O";
        } else if(tote == 11){
            oo = "O";
        } else if(tote == 12){
            ot = "O";
        } else if(tote == 20){
            tz = "O";
        } else if(tote == 21){
            to = "O";
        } else if(tote == 22){
            tt = "O";
        }
        printf ("|%d|%d|%d", zz, zo, zt);
        cout << endl;
        printf ("|%d|%d|%d", oz, oo, ot);
        cout << endl;
        printf ("|%d|%d|%d", tz, to, tt);

        if(zz == "X" && zo == "X" && zt == "X" || oz == "X" && oo == "X" && ot == "X" || tz == "X" && to == "X" && tt == "X" || zz == "X" && oz == "X" && tz == "X" || zo == "X" && oo == "X" && to == "X" || zt == "X" && ot == "X" && tt == "X" || zz == "X" && oo == "X" && tt == "X"){
            cout << endl << "X WINNER";
        break;
        }
        if(zz == "O" && zo == "O" && zt == "O" || oz == "O" && oo == "O" && ot == "O" || tz == "O" && to == "O" && tt == "O" || zz == "O" && oz == "O" && tz == "O" || zo == "O" && oo == "O" && to == "O" || zt == "O" && ot == "O" && tt == "O" || zz == "O" && oo == "O" && tt == "O"){
            cout << endl << "O WINNER";
            break;
        }
    }
    system("pause");
    return 0;
}

Upvotes: 0

Views: 2122

Answers (3)

Matt Westlake
Matt Westlake

Reputation: 3651

also pertaining to your code

if(zz == "X" && zo == "X" && zt == "X" || oz == "X" && oo == "X" && ot == "X" || tz == "X" && to == "X" && tt == "X" || zz == "X" && oz == "X" && tz == "X" || zo == "X" && oo == "X" && to == "X" || zt == "X" && ot == "X" && tt == "X" || zz == "X" && oo == "X" && tt == "X"){
        cout << endl << "X WINNER";

should be

if((zz == "X" && zo == "X" && zt == "X") || (oz == "X" && oo == "X" && ot == "X") || (tz == "X" && to == "X" && tt == "X") || (zz == "X" && oz == "X" && tz == "X") || (zo == "X" && oo == "X" && to == "X") || (zt == "X" && ot == "X" && tt == "X") || (zz == "X" && oo == "X" && tt == "X")){
        cout << endl << "X WINNER";

Your compares are looking at each individual mark instead of looking for a combination of marks. The () around each set of 3 will give you your desired result.

Upvotes: 0

hmjd
hmjd

Reputation: 122001

You need to #include <string>, where the operator== is defined.

And, as already stated by jrok, you are passing a std::string to printf(): use cout instead (as you already using).

Upvotes: 1

jrok
jrok

Reputation: 55415

You're trying to pass std::strings to printf, which is a C library function. Furthermore, the format string says you'll pass integers ("|%d|%d|%d").

printf will only take c-style strings, so if that's what you want, you can say something like:

printf("|%s|%s|%s", ot.c_str(), zz.c_str(), ...);

Upvotes: 0

Related Questions