【问题标题】:Error: no match for 'operator&&'错误:'operator&&' 不匹配
【发布时间】:2011-10-06 13:50:11
【问题描述】:

我收到以下错误

错误:'board[0][0] && board[0][1]'中的'operator&&'不匹配

我的代码如下:

    #include <iostream>
    #include <cstdlib>
    #include <ctime>

    using namespace std;

    int main()
    {
        string board[3][3];
         board[0][0] = "[ ]";
         board[0][1] = "[ ]";
         board[0][2] = "[ ]";
         board[1][0] = "[ ]";
         board[1][1] = "[ ]";
         board[1][2] = "[ ]";
         board[2][0] = "[ ]";
         board[2][1] = "[ ]";
         board[2][2] = "[ ]";
         string choice;
         int counter;
         do
         {
            for(counter=0;counter<5;counter++)
            {
                cout<<board[0][0]<<board[0][1]<<board[0][2]<<endl;
                cout<<board[1][0]<<board[1][1]<<board[1][2]<<endl;
                cout<<board[2][0]<<board[2][1]<<board[2][2]<<endl;
            cout<<"(Player 1) Tell me the coordinates of where you want your X togo: ";
                cin>>choice;
                cout<<endl;
                if(choice=="1,1")
                {
                    board[0][0] = "[X]";
                }
                else if(choice=="1,2")
                {
                    board[1][0] = "[X]";
                }
        else if(choice=="1,3")
        {
            board[2][0] = "[X]";
        }
        else if(choice=="2,1")
        {
            board[0][1] = "[X]";
        }
        else if(choice=="2,2")
        {
            board[1][1] = "[X]";
        }
        else if(choice=="2,3")
        {
            board[2][1] = "[X]";
        }
        else if(choice=="3,1")
        {
            board[0][2] = "[X]";
        }
        else if(choice=="3,2")
        {
            board[1][2] = "[X]";
        }
        else if(choice=="3,3")
        {
            board[2][2] = "[X]";
        }

        if(board[0][0] && board[0][1] && board[0][2] == "[X]" || board[1][0] && board[1][1] && board[1][2] == "[X]" || board[2][0] && board[2][1] && board[2][2] == "[X]" || board[0][0] && board[1][0] && board[2][0] == "[X]" || board[0][1] && board[1][1] && board[2][1] == "[X]" || board[0][2] && board[1][2] && board[2][2] == "[X]" || board[0][0] && board[1][1] && board[2][2] == "[X]" ||board[2][0] && board[1][1] && board[0][2] == "[X]" ||)
        {
            cout<<"Player 1 wins!"<<endl;
        }

    }
 }
 while(counter<5);
 return 0;

}

错误所在的行如下:

if(board[0][0] && board[0][1] && board[0][2] == "[X]" || board[1][0] && board[1][1] &&     board[1][2] == "[X]" || board[2][0] && board[2][1] && board[2][2] == "[X]" || board[0][0]    && board[1][0] && board[2][0] == "[X]" || board[0][1] && board[1][1] && board[2][1] == "[X]" || board[0][2] && board[1][2] && board[2][2] == "[X]" || board[0][0] && board[1][1] && board[2][2] == "[X]" ||board[2][0] && board[1][1] && board[0][2] == "[X]" ||)

【问题讨论】:

    标签: c++ arrays compiler-errors syntax-error


    【解决方案1】:

    您需要更改以下内容:

    board[0][0] &amp;&amp; board[0][1] &amp;&amp; board[0][2] == "[X]"

    收件人:

    board[0][0] == "[X]" &amp;&amp; board[0][1] == "[X]" &amp;&amp; board[0][2] == "[X]"

    这样 && 两边的输入都是布尔值

    【讨论】:

    • 我应该让每组新的 3 个数组单元都成为自己的 if 语句,还是可以像我拥有的​​那样将它们全部保留为一个 if 语句?
    • @Jesus std::stringconst char * 有一个operator== 重载。它会起作用的。
    • 您可能需要考虑为此使用宏或内联函数。否则看起来有点乱。
    【解决方案2】:

    我建议使用字符数组而不是字符串数组 - 然后,当您要求用户输入并且他输入说“1, 3”时 - 您可以简单地声明两个整数并使用它们:

    int x, y;
    scanf("%i,%i", &x, &y);
    board[x][y] = 'X'; 
    // and when printing the board, use: cout << "["<<board[x][y]<<"]"; 
    // - or better yet, use printf :) 
    
    // alternatively with cin:
    int x, y;
    cin >> x;
    cin.ignore(1,',');
    cin >> y;
    board[x][y] = 'X';
    

    这将缩短所有“确定用户选择的平方”代码:)

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2014-07-03
      • 1970-01-01
      • 2018-05-15
      相关资源
      最近更新 更多