【问题标题】:Different result executing the same function [C++]执行相同功能的不同结果[C++]
【发布时间】:2018-06-15 22:42:58
【问题描述】:

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

#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;
}

问题是,当我执行主函数时,我得到两个不同的结果,如图所示(bBoard.showBoard 是左侧结果,另一个是 iIOS.drawScene())

我必须做些什么才能获得具有这两个功能的正确板?

【问题讨论】:

  • 为你删除了 C 标签,因为这显然不是 C。
  • 您的 Initializer 构造函数对其参数没有任何作用。
  • 使用调试器查看bBoard中的drawScene

标签: c++ function class


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-01
      • 2021-05-04
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多