Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误C2371:重新定义;不同的基本类型-为什么?_C_Visual Studio 2010 - Fatal编程技术网

错误C2371:重新定义;不同的基本类型-为什么?

错误C2371:重新定义;不同的基本类型-为什么?,c,visual-studio-2010,C,Visual Studio 2010,我有以下代码: #include <stdio.h> #include <stdlib.h> // helping void sortint(int numbers[], int array_size) { int i, j, temp; for (i = (array_size - 1); i > 0; i--) { for (j = 1; j <= i; j++) { if (numbers[j-1] >

我有以下代码:

#include <stdio.h>
#include <stdlib.h>

// helping
void sortint(int numbers[], int array_size)
{
  int i, j, temp;

  for (i = (array_size - 1); i > 0; i--)
  {
    for (j = 1; j <= i; j++)
    {
      if (numbers[j-1] > numbers[j])
      {
        temp = numbers[j-1];
        numbers[j-1] = numbers[j];
        numbers[j] = temp;
      }
    }
  }
}

// exer1 - A

void sort(int** arr, int arrsize) {
    int i = 0;
    // sort....
    for(; i < arrsize; ++i) {
        sortint((*(arr+i))+1,  **(arr+i));
    }
}

// Exer1 - B

void print(int** arr, int arrsize) {
    int i = 0, j, size, *xArr;
    for(; i < arrsize; ++i) {
        size = **(arr+i);
        xArr = *(arr+i);
        printf("size: %d: ", size);
        // print elements
        for(j = 1; j <= size; ++j) printf("[%d], ", *(xArr+j));
        printf("\n");
    }
}

// Exer2:

void exera() {
    int* ptr = (int*)malloc(sizeof(int));
    if(!ptr) exit(-1);
    eb(ptr);
    free(ptr);
}

void eb(int* ptr) {
    int* arr = (int*) malloc(sizeof(int) * (*ptr));
    int i = 0;
    for(; i < *ptr; ++i) scanf("%d", arr+i);
    ec(arr, *ptr);
}

void ec(int* arr, int size) {
    int i;
    sortint(arr, size);
    for(i = 0; i < size; ++i) printf("[%d], ", *(arr+i));
}

int main() {
    // Exer1:
    int a[] = {4,3,9,6,7};
    int b[] = {3,2,5,5};
    int c[] = {1,0};
    int d[] = {2,1,6};
    int e[] = {5,4,5,6,2,1};
    int* list[5] = {a,b,c,d,e};
    sort(list, 5); // A
    print(list, 5); // B
    printf("\n\n\n\n\n");
    // Exer2:
    exera();
    fflush(stdin);
    getchar();
    return 0;
}
我试图更改函数名,但没有任何结果


为什么会出现这种错误?我使用Visual C++快件2010。

< p>在声明或定义之前,你试图调用<代码> EB < /C>和<代码> EC >代码>。将
ec
的定义移动到
eb
之前以及
exera
之前。您也可以在定义任何函数之前进行前向声明,如下所示:

void eb(int* ptr) ;
void ec(int* arr, int size) ;

在声明
eb
之前,从
exera
调用
eb
。编译器假定它将返回
int
,然后找到一个在文件后面返回
void
的实现

最常见的修复方法是在文件顶部附近声明本地函数

void eb(int* ptr);
// repeat for each other function which generates the same error

如果要将函数
eb
放置在调用点之后,则需要在调用之前为其放置一个原型。。。否则,C将使用默认原型,然后您的函数将重新定义它,从而返回您收到的错误


或者,您可以在源文件中使用函数之前移动函数本身,但这并不总是可能的。将原型放在文件顶部,或者更好的是,放在头文件中,您可以在任何地方使用函数,这是最好的选择。

在使用函数之前,需要原型定义或声明。酷。这个答案第二次帮助了我。
void eb(int* ptr);
// repeat for each other function which generates the same error