【问题标题】:Semantics Issue: No matching function for call to 'displayBoard'语义问题:对“displayBoard”的调用没有匹配的函数
【发布时间】:2015-11-10 03:06:24
【问题描述】:

我只是在调用一个以二维数组作为参数的函数。我不明白为什么它告诉我没有要调用的函数,我可以看到该函数。 这是我的代码开头的原型: void displayBoard(int [][COLS], int); 这是调用 displayBoard 的函数和 displayBoard 函数:

void playerTurn()
{
    char board[ROWS][COLS] = {{'*', '*', '*'}, {'*', '*', '*'}, {'*', '*', '*'}};
    char row, col;

    displayBoard(board, ROWS);
    cout << "Player X's Turn.\nEnter a row and a column to place an X.\nRow: ";
    cin >> row;
    cout << "\nColumn: ";
    cin >> col;
    //clear screen
    //edit contents of 2D array
    displayBoard(board, ROWS);
    cout << "Player O's Turn.\nEnter a row and a column to place an X.\nRow: ";
    cin >> row;
    cout << "\nColumn: ";
    cin >> col;
    //Validate each user's move (make sure there isn't an x or o already there
    //Ask for a re-input is validation fails
}

void displayBoard(const char board[][COLS], int ROWS)
{
    cout << setw(14) << "Columns" << endl;
    cout << setw(14) << "1 2 3 " <<  endl;
    cout << "Row 1:  " << board[0][0] << " " << board[0][1] << " " << board[0][2] << endl;
    cout << "Row 2:  " << board[1][0] << " " << board[1][1] << " " << board[1][2] << endl;
    cout << "Row 3:  " << board[2][0] << " " << board[2][1] << " " << board[2][2] << endl;
    cout << endl;
}

它在 playerTurn 函数的两个调用中都给了我错误。 我不知道我做错了什么。

【问题讨论】:

  • 语义问题:对“displayBoard”的调用没有匹配的函数

标签: c++ call


【解决方案1】:

你已经在函数定义之前声明了

void displayBoard(int [][COLS], int);

然后在playerTurn()你打电话

displayBoard(board, ROWS);

这里的board 是一个char board[ROWS][COLS],因此编译器会查看它是否看到了一个声明或定义的名为displayBoard 的函数,它采用了这些参数。由于编译器没有看到,所以会报错。

要解决此问题,您需要将声明更改为

void displayBoard(const char board[][COLS], int ROWS);

或者你可以改变函数的顺序,在displayBoard()之前定义playerTurn()

【讨论】:

  • 在编写任何函数之前我都有函数原型 void displayBoard(int[][COLS], int); void playerTurn();
  • @InkySkies123 但是你有void displayBoard(const char board[][COLS], int ROWS);void displayBoard(int [][COLS], int);。我认为这可能是真正的问题,但如果不是,我将删除它。
  • 我把 displayBoard 函数移到 playerTurn 函数之前,错误消失了,你一定是对的!你能试着再解释一下我的定义做错了什么吗,因为我不太明白这是怎么搞砸的以及为什么。
  • @InkySkies123 我已经改变了答案。让我知道这是否有效。
【解决方案2】:

playerTurn 中的board 包含char,但displayBoard 中的参数期望它包含int

【讨论】:

  • 啊,谢谢你接听这个,那以后会咬我,但它并没有解决错误。
  • xcode 已经非常清楚地表明它在函数调用的“显示板”部分存在问题。它在两次调用中都将红色波浪线置于该部分下方。
猜你喜欢
  • 2011-03-03
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多