class CMoveGenerator  
{
public:
CMoveGenerator();
virtual ~CMoveGenerator();
int CreatePossibleMove(BYTE position[GRID_NUM][GRID_NUM], int nPly,int nSide); STONEMOVE m_MoveList[10][225];
protected:
int AddMove(int nFromX,int nToX,int nPly);
int m_nMoveCount;
};int CMoveGenerator::AddMove(int nToX, int nToY,int nPly)
{
m_MoveList[nPly][m_nMoveCount].StonePos.x = nToX;
m_MoveList[nPly][m_nMoveCount].StonePos.y = nToY;
m_nMoveCount++;
m_MoveList[nPly][m_nMoveCount].Score = PosValue[nToY][nToX];
return m_nMoveCount;//这里返回m_nMoveCount
}
int CMoveGenerator::CreatePossibleMove(BYTE position[GRID_NUM][GRID_NUM], int nPly, int nSide)
{
int i,j;
m_nMoveCount = 0;
for (i = 0; i < GRID_NUM; i++)
for (j = 0; j < GRID_NUM; j++)
{
if (position[i][j] == (BYTE)NOSTONE)
{
AddMove(j, i, nPly);//这里收到一个返回值,这个返回值难道不该赋值给一个变量??我认为应该是这样的m_nMoveCount=AddMove(j,i,nPly) ; 我错了?如果我错了的话,那么在c里边也可以这样实现?
}
} CHistoryHeuristic::MergeSort(m_MoveList[nPly], m_nMoveCount, 0);
return m_nMoveCount;
}

解决方案 »

  1.   

    没太仔细看 但是AddMove()中已经对类中的变量m_nMoveCount做了操作 m_nMoveCount++;
    你说的那个地方就没必要再写成m_nMoveCount=AddMove(j,i,nPly);了吧
      

  2.   

    同意 cy214(我爱C++) m_nMoveCount 是 保护成员,对所有的public成员函数都是可见的。CMoveGenerator::CreatePossibleMove已经对它做了操作,效果就好象C语言中函数在内部对全局变量做了修改,其结果在函数退出后依然有效。不知道是不是这样?
      

  3.   

    如果返回值需要用到或者保存的话,你就需要赋值或者进行其他调用操作,这里只是对m_MoveList进行操作,它的数量nMoveCount赋值不赋值都无所谓。