执行相同功能的不同结果[C ++]

时间:2018-06-15 22:42:58

标签: c++ function class

您好,并提前致谢。 我需要用C ++创建一个俄罗斯方块项目,我有板和类的类,但我想做一个初始化类,所以我正在做的是这个

#include "Initializer.h"

void Initializer::drawBoard()
{

}

// --------------------------------- Public Part ----------------------- //

Initializer::Initializer(Board *bBoard, Pieces *pPieces)
{

}

void Initializer::drawScene()
{
    bBoard->showBoard();
}

这是董事会成员:

Board::Board(Pieces *mPieces)
{
    for(int x = 0; x < 20; x++)
    {
      for(int y = 0; y < 10; y++)
      {
        mBoard[x][y] = 0;
      }
    }
}

void Board::showBoard()
{
    for(int x = 0; x < 20; x++)
    {
        for(int y = 0; y < 10; y++)
        {
          if(mBoard[x][y] == 0)
          {
            cout << 0;
          }
          else
          {
            cout << "x";
          }
        }
        cout << endl;
    }

}

和主要功能

#include "Pieces.h"
#include "Board.h"
#include "Initializer.h"
#include <iostream>
using namespace std;



int main(int numeroArgumentos, char *argumentos[])
{
  srand (time(NULL));
  int randomNumber = rand() % 6;
  Pieces mPieces;
  Board bBoard(&mPieces);
  Initializer iIOS(&bBoard, &mPieces);
  bBoard.showBoard();
  iIOS.drawScene();
  return 0;
}

问题是,当我执行main函数时,我得到两个不同的结果,如图中所示(bBoard.showBoard是左边的结果,另一个是iIOS.drawScene()) enter image description here

我需要做些什么来获得具有这两个功能的正确电路板?

2 个答案:

答案 0 :(得分:2)

你得到的是未定义的行为。 Initializer的构造函数实际上并没有捕获board中的值,因此它可能只是通过不属于它的内存运行。

答案 1 :(得分:1)

Initializer构造函数需要将其参数保存在适当的成员变量中。只是命名与成员变量相同的参数不会自动执行此操作。您可以使用成员初始值设定项列表来执行此操作。

Initializer::Initializer(Board *bBoard, Pieces *pPieces): bBoard(bBoard), pPieces(pPieces) {}