错误:没有用于调用memsetNincr的匹配函数

Error: No matching function for call to memsetNincr

本文关键字:函数 memsetNincr 调用 用于 错误      更新时间:2023-10-16

函数memsetNincr用整数填充一个大小为"size"的数组,每个整数的值比最后一个大一。我最近在函数方面遇到了这个问题。。。

#include <iostream>
using namespace std;
void memsetNincr(int, int, int);
int main()
{
    int size, initVal;
    cout << "Enter size of array followed by the value of its' first element: n";
    cin >> size >> initVal;
    int array[size];
    cout << memsetNincr(array, size, initVal) << endl;
    return 0;
}
void memsetNincr(int array[], int howmany, int startingVal)
{
    int i;
    array[0] = startingVal;
    for (i=0; i<=howmany; i++)
    {
        array[i] = array[i-1]-1;
        cout << array[i] << "  ";
    }
}

cout期望一个流或可以被广播到流的东西。您的函数返回void,并且void不能被强制铸造。更改函数以返回字符串或字符串流对象,或者只在cout之外调用它。

编辑:在cout之外称它,我的意思是这样的:

int main()
  {
  int size, initVal;
  cout << "Enter size of array followed by the value of its' first element: n";
  cin >> size >> initVal;
  int array[size];
  memsetNincr(array, size, initVal);
  cout << endl;
  return 0;
}

cout << memsetNincr(array, size, initVal) << endl;更改为memsetNincr(array, size, initVal);

更改

for (i=0; i<=howmany; i++)
{
    array[i] = array[i-1]-1;
    cout << array[i] << "  ";
}

for (i=1; i<=howmany; i++)
{
    array[i] = array[i-1]-1;
    cout << array[i] << "  ";
}

首次运行i = 0

array[i] = array[i-1]-1;

所以

array[0] = array[0-1]-1;

所以

array[0] = array[-1]-1; -> error
(i=1; i<=howmany; i++) 

应该修复它。

=====1=====

您的函数声明不对,参数int array[]int *array

void memsetNincr(int array[], int howmany, int startingVal);

或void memsetNincr(int*array,int howmany,int startingVal);

======2======

memsetNincr为空,表示函数不返回任何值,因此不能通过coutprintf进行打印。

cout << memsetNincr(array, size, initVal) << endl;

应该通过写入

memsetNincr(array, size, initVal);

这是你的代码

#include <iostream>
using namespace std;
void memsetNincr(int*, int, int);
int main()
{
    int size, initVal;
    cout << "Enter size of array followed by the value of its' first element: n";
    cin >> size >> initVal;
    int array[size];
    //cout << memsetNincr(array, size, initVal) << endl;
    memsetNincr(array, size, initVal);
    return 0;
}
void memsetNincr(int array[], int howmany, int startingVal)
{
    int i;
    array[0] = startingVal;
    for (i=0; i<=howmany; i++)
    {
        array[i] = array[i-1]-1;
        cout << array[i] << "  ";
     }
}

C++中没有可变长度数组。所以数组的大小应该是一个常数表达式。

如果元素的数量由用户给定,则可以使用头<vector>中声明的标准类std::vector

函数memsetNincr接受数组类型的第一个参数。所以至少它的第一个参数应该像一样声明

void memsetNincr(int *, int, int);

void memsetNincr(int [], int, int);

此外,该函数具有返回类型void。所以你可能不会在像这样的语句中使用它

cout << memsetNincr(array, size, initVal) << endl;

您应该使用一个单独的循环来输出数组的元素。

考虑到,如果阵列具有howmany元素,那么相应的循环将看起来像

for (i=0; i < howmany; i++)
          ^^^^^^^^^^^

因为索引的有效范围是[0, howmany-1]