2013-07-06 70 views
0

出于某种原因,我收到错误“没有匹配的函数调用到'OptimalBinarySearchTree'”第15行。我不知道它是否与我传递的方式有关数组指针或者是否已经离开了某些东西。我从来没有尝试过传递2D数组,所以它可能会搞砸了。没有匹配的函数调用已定义的函数

#include <iostream> 

using namespace std; 

void OptimalBinarySearchTree(int n, int *P[n], int (*values)[n][n], int (*roots)[n][n]);  

int main() 
{ 
    const int n = 18; 
    char A[n] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R'}; 
    int P[n] = {995,22,23,562,33,8,60,118,30,723,807,626,15,89,21,128,626,621}; 
    int values[n][n]; 
    int roots[n][n]; 

    OptimalBinarySearchTree(n, P, values, roots); 

    return 0; 
} 

void OptimalBinarySearchTree(int n, int *P[n], int (*values)[n][n], int (*roots)[n][n]) 
{ 
    for (int i = 1; i <= (n+1); i++) 
    { 
     (*values)[i][i] = 0; 
    } 
    for (int i = 1; i <= n; i++) 
    { 
     (*values)[i][i] = *P[i]; 
     (*roots)[i][i] = i; 
    } 

    for (int d = 1; d <= (n-1); d++) 
    { 
     for (int i = 1; i <= (n-d); i++) 
     { 
      int j = i + d; 
      int sumP = 0; 
      int minValue = 999999999; 
      int minRoot = 0; 

      for (int k = i; k <= j; k++) 
      { 
       sumP += *P[k]; 
       int value = (*values)[i][k-1] + (*values)[k+1][j]; 
       if (value < minValue) 
       { 
        minValue = value; 
        minRoot = k; 
       } 
      } 

      (*values)[i][j] = sumP + minValue; 
      (*roots)[i][j] = minRoot; 
     } 
    } 
}; 

任何帮助,将不胜感激。谢谢,

+0

此外,在'OptimalBinarySearchTree'中,您试图访问边界之外的元素。 – soon

+0

很快,让你的评论成为一个答案,所以我可以给你信用。我正在寻找的答案在于你联系的问题。谢谢。 – joed4no

回答

0

您正在添加一个间接层:

void OptimalBinarySearchTree(int n, int *P[n], int (*values)[n][n], int (*roots)[n][n]);  

int main() 
{ 
    const int n = 18; 
    char A[n] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R'}; 
    int P[n] = {995,22,23,562,33,8,60,118,30,723,807,626,15,89,21,128,626,621}; 
    int values[n][n]; 
    int roots[n][n]; 

    OptimalBinarySearchTree(n, P, values, roots); 

    return 0; 
} 

int *P[n]int (*values)[n][n]等意味着你的函数采用的int指针(P)和int指针二维阵列的阵列(称为values)。但是,您正在传递一个值为int的值数组和一个int值的二维数组。

删除*它应该会变得更好。但是,我敢肯定,要么通过int n,要么是完全非法的编译器扩展,要么将其用于values阵列的维度。由于它是C++,因此您可能需要考虑使用vector<int>vector <vector <int> >