2017-12-21 5 views
0

저는 멤버 함수 중 하나에서 수업 시작 부분에 선언 한 공용 변수에 액세스하고 싶습니다. 그러나 그것은 그것이 범위를 벗어난다는 것을 말하고 있습니다.자신의 클래스의 멤버 함수 내에서 공용 변수에 액세스하는 방법은 무엇입니까? (C++)

Goban :: Goban (생성자)은 훌륭하게 작동합니다. 의도 한대로 "보드"와 "isWhiteToPlay"값을 성공적으로 액세스하고 변경합니다.

printBoard의 코드는이 클래스를 호출하는 프로그램에서 작동했지만, 이제 여기에서 옮겼습니다. " '이 보드에서'이 범위에서 선언되지 않았습니다."라는 컴파일 시도가 충족되었습니다. 보드도 isWhiteToPlay도 playMove에서 같은 운명을 피할 수 없습니다.

내가 뭘 잘못하고 있니? 그것은 공개 변수입니다.하지만 아직 수업을 듣고있을 필요가 없습니다. 맞습니까? Goban의 함수 내에서 Goban 변수에 액세스하고 수정할 수있는 쉬운 방법이 있습니까? 나는 보드를 함수로 전달하고 리턴하기 위해 보드를 포인터로 취급하는 것을 기대하지 않을 것이다. 나는 그것을 할 수 있다고 생각하지만, 훨씬 더 우아한 방법이 없다고 나는 상상할 수 없다.

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 스레드에 대한 링크가 환영받을 것입니다. 물론 여기에 대한 답변은 불평하지 않지만 휠을 재발견 할 필요는 없습니다.

답변

2

Goban::printBoardGoban::playMove을 의미합니다. 그대로, 당신은 단순히 + 자유 함수 정의 선언입니다.

void Goban::printBoard() 
{ 
} 

그냥 당신이 당신의 생성자에 대한이 같은 : 나는 당신이 말할 때 가정

Goban::Goban() 
{ 
} 

는이 클래스를 호출하는 프로그램에있을 때 printBoard의 코드가 작동

당신은 클래스에 코드가있을 때 작동 했었다는 것을 의미합니다. decl aration)하지만, 이제는 그것들을 별도의 정의로 옮겼습니다.

+0

그게 전부라고 생각합니다. 그것은 내가 예상했던 것보다 훨씬 간단했다. 고맙습니다. 편집 : 예. 단지 그것을 바꿨고 모든 오류는 어리 석다. 다시 감사합니다. – Joshua

관련 문제