C++ 发出「==&引用;类中的运算符

C++ 发出「==&引用;类中的运算符,c++,codeblocks,C++,Codeblocks,我在教室的代码有问题。每当我尝试让房间构造函数(如下所示)在数组ARoom和ADisc中放置一个字符时,它与我尝试使用break忽略的字符相同,当我使用APrint()时,所有值都会被忽略 Aprint() 返回 [ ☻☺ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] Process retu

我在
教室的代码有问题。每当我尝试让房间构造函数(如下所示)在数组
ARoom
ADisc
中放置一个字符时,它与我尝试使用
break
忽略的字符相同,当我使用
APrint()
时,所有值都会被忽略

Aprint()

返回

[   ☻☺     ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]

Process returned 0 (0x0)   execution time : 0.039 s
Press any key to continue.
如果我将
If(this->ADisc[d][I]=“0”)
更改为
If(this->ADisc[d][I]=“me”)
,那么我得到了这个

[   ☻☺     ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[1, ]: 0
[2, ]: 0
[3, ]: 0
[4,☻]: you
[5, ]: 0
[6, ]: 0
[7, ]: 0
[8, ]: 0
[9, ]: 0
[10, ]: 0
[11, ]: 0
[12, ]: 0
[13, ]: 0
[14, ]: 0
[15, ]: 0
它继续到
[1876,]:0
,但不打印
[3,☺]: 我

如何修复或绕过它?

您的问题在于“break”的使用。“break”是一个脱离当前循环结构的命令

当您搜索“0”(空磁贴)时,它一看到空磁贴就调用break,从而取消整行的其余打印

当你搜索“我”(玩家磁贴?)时,看到一个“我”磁贴,就会调用break,跳过“我”磁贴的打印,取消该行其余部分的打印,因此任何没有“我”的行都可以

所以只要去掉这里的break就可以避免这个问题

~~~


但是,您提到它没有打印您试图忽略的字符,但问题是您的if语句明确告诉它在这些情况下不要打印磁贴信息,因此很难知道您的预期行为。也许您可以尝试不使用if语句,并让我们知道是否存在任何错误主要问题。

ARoom和ADisc是如何定义的?@hmatar
char ARoom[25][78];
字符串ADisc[25][78];
bolth是私有的。@JasonLang使用“me”如果我做了所有的
ADisc
x并告诉它忽略x,那么它将忽略所有内容,但是如果我将所有的
ADisc
设置为y并告诉它忽略x,它将像应该的那样忽略x。只需要
中断
就可以中断第一个循环,否则我将有2个
中断我没有注意到你的问题,或者你没有注意到我说的话。“break”取消for循环,因此它跳过了对同一行上所有其他内容的检查。不要使用break,简单的修复。事实上,对我的检查是对同一行上所有其他内容的检查。25*78=1950,而不是1876。所以在“me”之后的所有内容都是在这一行上也被跳过,这是由于在这里使用“break”引起的错误,它不太明显,因为它只影响这一行。这仍然是一个错误。在1949年忽略字符“me”时,打印量应该会增加。事实上,当它看到
0
要中断时,但当它看到
me
时,它无论如何都会中断。其目的是当它看到
0
要中断时,以及当它看到其他(x)打印
[1,x]:x
。另一个报告的问题是,如果我告诉它在看到
me
时中断,它会像它应该的那样中断。你认为“中断”在做什么?你在这里没有任何意义。看到中断会取消网格同一行上存在的所有其他检查。中断会结束整行的for循环。如果你想跳过“我”然后它实际上应该打印1949行数据(78*25-1)。但是您只得到1876行,因为与“me”同一行上的其余平铺被跳过。这仍然是一个错误。
void Aprint()
{
    system("CLS");
    for(int d=0; d<25; d++)
    {
    if(this->ARoom[d][0]==char(0))
        break;
    cout << "[";
        for(int i=0; i<78; i++)
        {
            if(this->ARoom[i][d]==char(0))
                break;
            cout << this->ARoom[d][i];
        }
    cout << "]" << endl;
    }
    int r = 0;
    for(int d=0; d<25; d++)
    {
        for(int i=0; i<78; i++)
        {
            if(this->ADisc[d][i]=="0")
            {
                break;
            }
            else
            {
                r++;
                cout << "[" << r << "," << this->ARoom[d][i] << "]: " << this->ADisc[d][i] << endl;
            }
        }
    }
}
int main()
{
    room Spawn(10,10);
    Spawn.SetSpot(5,1, char(1), "me");
    Spawn.SetSpot(4,1, char(2), "you");
    Spawn.Aprint();
}
[   ☻☺     ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]

Process returned 0 (0x0)   execution time : 0.039 s
Press any key to continue.
[   ☻☺     ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[          ]
[1, ]: 0
[2, ]: 0
[3, ]: 0
[4,☻]: you
[5, ]: 0
[6, ]: 0
[7, ]: 0
[8, ]: 0
[9, ]: 0
[10, ]: 0
[11, ]: 0
[12, ]: 0
[13, ]: 0
[14, ]: 0
[15, ]: 0