如何从他们自己的类的成员函数中访问公共变量? (C ++)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从他们自己的类的成员函数中访问公共变量? (C ++)相关的知识,希望对你有一定的参考价值。

我想从我的一个成员函数中访问我在类的开头声明的公共变量。但它说它超出了范围。

Goban :: Goban(构造函数)效果很好。它按预期成功访问和更改“board”和“isWhiteToPlay”的值。

printBoard的代码在调用这个类的程序中有效,但是现在我把它移到了这里,编译的尝试遇到了''board'没有在这个范围内声明“。无论是董事会还是白人都在PlayMove中逃脱了同样的命运。

我在这做错了什么?这是一个公共变量,但它甚至不需要因为我还在课堂上,对吧?有没有一种简单的方法可以从Goban的函数中访问和修改Goban的变量?我不希望将board作为指针处理,以便将它传递给函数然后返回它。我想我能做到,但我无法想象没有更优雅的方式。

class Goban
    {
    public:
      int board[9][9]; // y,x  -1 = W  +1 = B
      int captures[2];
      bool isWhiteToPlay; // 0 for Black's turn, 1 for White's turn

  Goban();
  void printBoard(); // Prints the board to the terminal wherefrom the program is called.
  void playMove(int x, int y); // Makes a move for the turn player at the coordinate (x,y). Right now I'm just trying to get it to change the value of the proper coordinate of "board" and not caring if the move is legal.
};

Goban::Goban() // Just initializing everything to zero here for now. Interesting to note that there are no compiling errors in this constructor. But later it complains when I use board and isWhiteToPlay elsewhere. The only difference I can see is that here they're in for loops, and there they're in if clauses. Not sure why that would make a difference, nor how to work around it.
{
  captures[0] = 0;
  captures[1] = 0;

  for (int j = 0; j <= 8; j++)
  {
    for (int i = 0; i <=8; i++)
    {
      board[j][i] = 0;
    }
  }

  isWhiteToPlay = 0;
}

void printBoard() // This code worked correctly when it was in the program, but the problem started when I moved it here to the class.
{
  for (int j = 0; j <= 8; j++)
  {
    for (int i = 0; i <= 8; i++)
    {
      if (board[j][i] == -1)
        { std::cout << " O"; }
      else if (board[j][i] == 1)
        { std::cout << " X"; }
      else
        { std::cout << " ."; }
    }
  }
}

void playMove(int x, int y) // Same errors as above; solution is probably the same.
{
  if (isWhiteToPlay == 0)
  {
    board[y][x] = -1;
    isWhiteToPlay = 1;
  }
  else
  {
    board[y][x] = 1;
    isWhiteToPlay = 0;
  }
}

我怀疑有人可能已经问过这个问题,但我想我只是没有提出正确的搜索条件,这可能表明我不完全理解我在这里做错了什么。如果有人理解这个问题我已经足够了解正确的搜索条件,那么欢迎链接到相应的现有stackoverflow线程。当然,我不会在这里抱怨答案,但不需要重新发明轮子,以及所有这些。

答案

你的意思是有Goban::printBoardGoban::playMove。实际上,您只是声明+定义自由函数。

EG

void Goban::printBoard() 
{
}

就像你的构造函数一样:

Goban::Goban()
{
}

我假设你说的时候

printBoard的代码在调用这个类的程序中工作

你的意思是它曾经在类声明中有代码时工作,但你现在已经将它们移动到一个单独的定义中。

以上是关于如何从他们自己的类的成员函数中访问公共变量? (C ++)的主要内容,如果未能解决你的问题,请参考以下文章

让公共成员变量访问 C++ 中同一类的私有成员

C++ 使用变量访问类的公共成员

包和访问权限2

C++ - 如何从同一个类的静态函数访问一个类的私有成员?

如何访问其子类中的类的私有变量?

在 Kotlin 中如何从不同的模块访问内部成员