获得重新定义功能的问题

时间:2016-09-01 12:23:06

标签: c function redefinition

我正在尝试将数字扫描到2个2D数组中,并且我继续得到重新定义的错误。

代码:

#include <stdio.h>
#define N 3

  void getMatrix(double mat[N][N]);
 /*
 char getMenuOption();
 void getCoordinates(int*, int*);
  void sumMatrices(double mat1[][N], double mat2[][N]);
   void changeMatrix(double mat[][N]);
    void printMatrix(double mat[][N]);
*/
int main() {
double A[N][N], B[N][N];
/*
 char option;*/
getMatrix( A[N][N]);
getMatrix( B[N][N]);
/*

option = getMenuOption();*/

return 0;
 }
  void getMatrix(double A[N][N]){
int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&A[N][N]);
    }
    }
    return;

 }
    void getMatrix(double B[N][N]){
     int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&B[N][N]);
    }
    }
return;
  }

我想问题是两次调用相同的函数,但我不太确定。 如果有人能帮助我指出问题,那将是非常受欢迎的。

2 个答案:

答案 0 :(得分:1)

您不需要定义两次功能(将其称为两次或更多次)。一个函数可以被多次调用,这就是将函数放在首位的原因。摆脱

void getMatrix(double B[N][N]){
     int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&B[N][N]);
    }
    }
return;
  }

话虽如此,你应该调用像

这样的函数
getMatrix(A);
getMatrix(B);

传递数组(衰变到指针,无论如何)。符号A[N][N]表示数组的成员以及定义为

的数组
double A[N][N];

它是一个接一个,因为C中的数组索引从0开始。

答案 1 :(得分:0)

该函数定义了两次

第一个定义

  void getMatrix(double A[N][N]){
int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&A[N][N]);
    }
    }
    return;

 }

第二个定义

    void getMatrix(double B[N][N]){
     int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&B[N][N]);
    }
    }
return;
  }

考虑到这些函数调用无效

getMatrix( A[N][N]);
getMatrix( B[N][N]);

参数的类型为double,而不是数组或指针。

您应该删除该函数的一个定义并正确声明该函数。

如果编译器允许使用可变长度数组,则应将函数声明为

void getMatrix(size_t n, double A[n][n]);

如果编译器不支持可变长度数组,则N必须是常量,并且该函数确实可以声明为

#define N SOME_VALUE
//...
void getMatrix( double A[N][N] );

并调用函数

在第一种情况下

getMatrix( N, A );
getMatrix( N, B );

在第二种情况下

getMatrix( A );
getMatrix( B );