c++ 如何正确使用带有可选参数的函数?[关闭]

q43xntqr  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(99)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
3天前关闭。
Improve this question
我正在写一个并行归并排序算法,其中的merge函数有一个可选参数。我目前使用merge函数的方式表明我使用它的方式有错误,但我不知道是怎么回事。
我尝试使用不带可选参数的merge函数,它给了我一个错误:没有匹配的函数调用。
问题出在mergesort函数的最后一行。

void mergesort(int *a, int first, int last)
{
  if (first != last){
    int middle = (first + last) / 2;
    int *x = &a[first];
    int *y = &a[middle];
    mergesort(&a[first], first, middle);
    mergesort(&a[middle], middle + 1, last);
    merge(&a[first], &a[middle], middle, last);
  }
}
void merge(int *a, int *b, int lasta, int lastb, int *output = NULL)
{
  if (output == NULL){
    output = new int[lasta+lastb];
  }

  int i=0, j=lasta, k=0;
  while (i < lasta && j < lastb){
    if(a[i] < b[j])
      output[k++] = a[i++];
    else
      output[k++] = b[j++];
  }
  for(i; i < lasta; i++)
    output[k++] = a[i];
  for(j; j < lastb; j++)
    output[k++] = a[j];

  for(int x = 0; x < lastb; x++){
    cout << output[x] << " ";
  }
  cout << endl;
}
oknwwptz

oknwwptz1#

c++对使用前的声明非常挑剔和严格,由于merge不使用mergesort,但mergesort使用merge,因此必须在mergesort之前声明merge
当然,也有前瞻性声明,如

void merge(int *a, int *b, int lasta, int lastb, int *output = NULL);

或者正是用于此目的的典型头文件。

相关问题