没有匹配的呼叫功能

时间:2016-07-12 21:44:28

标签: c++

#include <iostream>
using namespace std;
int n;

void displaysum(double mat[n][n])
{
  double sum= 0;
  for(int j=0;j<n;j++)
    sum += mat[j][j];
  cout<<"Sum of Diagnols Elements is \n"<<sum;
}

int main()
{
  cout << "what are the number of rows or column in the matrix" << endl;
  cin >> n;    
  double matrix[n][n];
  for (int row = 0; row < n; row++)
  {
    for (int column = 0; column < n; column++)
      cin >> matrix[row][column];
  }

  displaysum(matrix)
  return 0;
}

我不明白为什么我在XCODE中调用没有匹配函数的错误。即使我尝试在我的函数原型中更改变量,它仍然会给我同样的错误。

1 个答案:

答案 0 :(得分:1)

  

我不明白为什么我在XCODE中调用没有匹配函数的错误。

基本问题是C ++希望第二个维在编译时是常量的,以便进行类型检查。如果你想解决这个问题,你将不得不使用指针(AFAIK)。您可以通过将displaysum的声明更改为

来完成此工作
void displaysum(double **mat)

并在原始函数中为matrix进行适当的分配。

如果您不喜欢这样,欢迎使用C ++的类型系统。在函数声明中,double mat[n][n]被视为double (*)[n]。这实际上是有道理的,但是为什么它没有看到matrix属于那种类型是因为n不是常数。您可以更改通话

displaysum(matrix);

到此:

displaysum(static_cast<double (*)[n]>(matrix);

并收到好奇的错误

static_cast from 'double (*)[n]' to 'double (*)[n]' is not allowed

(这不是你从类型系统中得到的最奇怪的错误)