【问题标题】:Getting issues for redefinition of functions获取重新定义函数的问题
【发布时间】:2016-09-01 12:23:05
【问题描述】:

我正在尝试将数字扫描到 2 个二维数组中,但我不断收到重新定义的错误。

代码:

#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;
  }

我猜问题是同一个函数被调用了两次,但我不太确定。 如果有人能帮我指出问题,将不胜感激。

【问题讨论】:

  • problem is that the same function is called twice,..嘿?这不是拥有它们的唯一目的吗???
  • 你实现了你的函数两次。没有必要这样做。
  • 我不知道。我没有说这是错误。
  • Zoli,你能提供一个关于如何写它的建议吗?
  • 你的代码格式一团糟,所以我不会看这个问题。

标签: c function redefinition


【解决方案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 开始。

【讨论】:

    【解决方案2】:

    函数定义了两次

    第一个定义

      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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多