C++ 动态数组使用相同的值实现整个数组

C++ 动态数组使用相同的值实现整个数组,c++,arrays,function,object,methods,C++,Arrays,Function,Object,Methods,程序正在尝试检查国际象棋棋棋步是否有效(很抱歉,注释是用波兰语写的,我希望代码即使不理解它们也很清楚)。对于典当来说,一切都正常运转,但对于塔楼来说,存在一个问题。我调试了这个程序,当我停止运行时 if(fRow < tRow) if(fRow刺[i][j]=“1”; last=1; } else if(last==1){ 此->刺[i][j]=“0”; last=0; } } 如果(最后==0) last=1; else if(last==1) last=0; }; ///罗兹塔维尼·

程序正在尝试检查国际象棋棋棋步是否有效(很抱歉,注释是用波兰语写的,我希望代码即使不理解它们也很清楚)。对于典当来说,一切都正常运转,但对于塔楼来说,存在一个问题。我调试了这个程序,当我停止运行时

if(fRow < tRow)
if(fRow
数组的每个字段都具有与sTab[0][0]相同的值。。有几行数值较高是正常的。
我试着用这个做了大约2个小时,但没有任何帮助,也许你会发现问题所在。

代码:

main.cpp:

#include "main.h"

using namespace std;

int main() {

    chess test;
    test.show();
    cout << test.ifMove("F1->B1");
    getch();
    return 0;
}
#包括“main.h”
使用名称空间std;
int main(){
国际象棋测试;
test.show();
出口宽度;++j){
如果(最后==0){
这个->刺[i][j]=“1”;
last=1;
}
else if(last==1){
此->刺[i][j]=“0”;
last=0;
}
}
如果(最后==0)
last=1;
else if(last==1)
last=0;
};
///罗兹塔维尼·皮奥沃///
对于(int i=0;iwidth;++i){
sTab[1][i]=sTab[1][i]+可湿性粉剂;
sTab[6][i]=sTab[6][i]+“bp”;
};
///罗兹塔维尼·科尼///
sTab[0][2]=sTab[0][2]+“wh”;
sTab[0][5]=sTab[0][5]+“wh”;
sTab[7][2]=sTab[7][2]+“bh”;
sTab[7][5]=sTab[7][5]+“bh”;
///罗兹塔维尼·戈坎沃///
sTab[0][1]=sTab[0][1]+“wj”;
sTab[0][6]=sTab[0][6]+“wj”;
sTab[7][1]=sTab[7][1]+“bj”;
sTab[7][6]=sTab[7][6]+“bj”;
///罗兹塔维尼酒店///
sTab[0][0]=sTab[0][0]+“wt”;
sTab[0][7]=sTab[0][7]+“wt”;
sTab[7][0]=sTab[7][0]+“bt”;
sTab[7][7]=sTab[7][7]+“bt”;
///罗兹塔维尼·克罗洛维奇///
sTab[0][4]=sTab[0][4]+“wq”;
sTab[7][3]=sTab[7][3]+“bq”;
///罗兹塔维尼·克罗洛///
sTab[0][3]=sTab[0][3]+“wk”;
刺[7][4]=刺[7][4]+“bk”;
///dopełnie pustych pól zerami i jedynkami///
对于(int i=0;iheight;++i){
对于(int j=0;jwidth;++j){
if(sTab[i][j]=“0”)
刺[i][j]=“000”;
否则,如果(刺[i][j]=“1”)
刺[i][j]=“111”;
}
};
刺[5][0]=“0bt”;
};
//////维特莱尼·萨乔尼//////
void chess::show(){
对于(int i=0;i<(this->height+1);++i){///przechodzimmy po 1 polu więcej,żeby dodaćkolumnęi wiersz z oznaczeniem kolumn i wierszy
对于(int j=0;j<(此->宽度+1);+j){
如果(i==0&&j==0)
cout高度=y;
如果(c='m'){
此->iTab=新整数*[此->高度];
对于(整数i=0;整数;+i)
this->iTab[i]=newint[this->width];
}
else如果(c=='c'){
此->刺=新字符串*[此->高度];
对于(整数i=0;整数;+i)
this->sTab[i]=新字符串[this->width];
}
否则{
}
};
tab2D::tab2D(tab2D&t){
tab2D(t.宽度,t.高度,'t');
};
tab2D::~tab2D(){
};
主要条款h:

#pragma once

#include <iostream>
#include <conio.h>
#include <string>
#include <cstdlib>

using namespace std;

enum Row;

class tab2D {

protected:
    int width;
    int height;
    string **sTab;
    int **iTab;

public:
    tab2D();
    tab2D(int x, int y, char c);
    ~tab2D();
    tab2D(tab2D&t);
};

class chess: public tab2D {

public:
    chess();
    ~chess();
    chess(chess&c);
    void init();
    int ifMove(string move);
    void show();
};

class matrix: public tab2D {

public:
    matrix(int x, int y);
    ~matrix();
    matrix(matrix&m);
};
#pragma一次
#包括
#包括
#包括
#包括
使用名称空间std;
枚举行;
类tab2D{
受保护的:
整数宽度;
内部高度;
弦**刺;
国际**iTab;
公众:
tab2D();
tab2D(整数x,整数y,字符c);
~tab2D();
tab2D(tab2D&t);
};
国际象棋类:公共tab2D{
公众:
国际象棋();
~chess();
国际象棋(chess&c),;
void init();
int-ifMove(字符串移动);
void show();
};
类矩阵:公共tab2D{
公众:
矩阵(intx,inty);
~matrix();
矩阵(矩阵&m);
};
您似乎将列和行混为一谈。在某些代码中,数组
sTab
由[row][column]索引,但在代码的这一部分中,您有另一种方式:

if(fRow < tRow)
  if(this->sTab[fCol][fRow-i] != "000" && this->sTab[fCol][fRow-i] != "111")
    return 0;
if(fRow插入[fCol][fRow-i]!=“000”&此->插入[fCol][fRow-i]!=“111”)
返回0;

程序告诉你塔楼可能不会从A6移动到A2(通过所有这些人)。

这是大量的代码,但它并不完整;我们无法编译它,我们无法重现错误。如果你准备了一个。投票否决我的问题而不给出理由(有什么理由这样做吗?)非常粗鲁。我必须尽快完成这个程序,奇怪的事情发生了:/我怀疑你的问题被否决的原因就是@Beta提到的原因。我不想在这里输入太多代码,但如果你想编译这个程序,我添加了所有必要的代码。我设法让它工作起来,但我仍然不明白为什么values都是sameYes,我注意到了它并使它正常工作。但我仍然不明白为什么在调试过程中,当我在“if”行中停止程序时,整个数组的值都与sTab[0][0]相同。无论如何,感谢您阅读代码并尝试提供帮助,我一直很感激:)
#pragma once

#include <iostream>
#include <conio.h>
#include <string>
#include <cstdlib>

using namespace std;

enum Row;

class tab2D {

protected:
    int width;
    int height;
    string **sTab;
    int **iTab;

public:
    tab2D();
    tab2D(int x, int y, char c);
    ~tab2D();
    tab2D(tab2D&t);
};

class chess: public tab2D {

public:
    chess();
    ~chess();
    chess(chess&c);
    void init();
    int ifMove(string move);
    void show();
};

class matrix: public tab2D {

public:
    matrix(int x, int y);
    ~matrix();
    matrix(matrix&m);
};
if(fRow < tRow)
  if(this->sTab[fCol][fRow-i] != "000" && this->sTab[fCol][fRow-i] != "111")
    return 0;