1

主文件

#include <iostream>
#include "prototipo.hpp"

using namespace std;

int main(){

int num_elem;
int minimo;

void (*compare)(int* x, int* y);
compare comp;
comp = swap;

cout << "Inserire numero di elementi: ";
cin >> num_elem;

int *pointA = new int[num_elem];

ordinamentoArray (pointA, num_elem, comp);

}

原型.hpp

#ifndef PROTOTIPO_HPP
#define PROTOTIPO_HPP

void ordinamentoArray (int pointA[], int num_elem, compare comp);
void swap(int* x,int* y);

#endif

企业cpp

#include <iostream>
#include "prototipo.hpp"

using namespace std;

void swap(int* x, int* y){

  int temp = *x;
  *x = *y;
  *y = temp;
}

void ordinamentoArray (int pointA[], int num_elem, compare comp){

  int indice;
  int indice2;
  int temp;

  for(indice=0; indice<num_elem; indice++){
    for(indice2=indice; indice2>0 && pointA[indice2]<pointA[indice2-1]; indice2--){

      if(pointA[indice2] < pointA[indice2-1]){
        comp(&pointA[indice2], &pointA[indice2-1]);
      }
    }
  }
}

这些是出现的错误。其中,最主要的是“error: 'compare' has not been declared”。老实说,我不知道错误是什么。谁能给我一个有用的提示来解决这个问题?不知道是不是我在声明函数指针的时候出错了,或者是传参出错了

4

2 回答 2

0

错误:“比较”尚未声明

void (*compare)(int* x, int* y);
compare =swap;

或者

typedef void (*compare)(int* x, int* y);
compare comp;
comp = swap;
于 2020-03-29T10:37:11.170 回答
0

在这个函数声明中

void ordinamentoArray (int pointA[], int num_elem, compare comp);

使用了compare尚未声明的名称。

compare在函数 main 中定义了指向函数类型 void( int *, int * )的指针(指针类型的对象 )

void (*compare)(int* x, int* y);

然后在这个语句中使用这个不是类型说明符的对象

compare comp;

那没有意义。

prototipo.hpp您应该在函数声明之前的标头中包含类型说明符 compare 的定义,例如

typedef void ( *compare )(int *, int *);

或喜欢

using compare = void ( * )( int *, int * );

在主要删除此声明之后

void (*compare)(int* x, int* y);

还有指针pointA指向的分配数组

int *pointA = new int[num_elem];

传递给未初始化的函数

ordinamentoArray (pointA, num_elem, comp);

请注意,比较某些东西的函数什么都不返回,这看起来很奇怪。通常,C++ 中的此类函数会返回一个可隐式转换为 type 的对象bool

于 2020-03-29T11:01:15.667 回答