获取函数重新定义的问题
Getting issues for redefinition of functions
我正在尝试将数字扫描到 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;
}
我想问题是同一个函数被调用了两次,但我不太确定。
如果有人能帮我指出问题,那将是非常欢迎的。
函数定义了两次
第一个定义
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 );
您不需要定义一个函数两次(调用它两次或更多次)。一个函数可以被多次调用,这就是首先要有函数的原因。干掉
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 个二维数组中,但一直出现重定义错误。
代码:
#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;
}
我想问题是同一个函数被调用了两次,但我不太确定。 如果有人能帮我指出问题,那将是非常欢迎的。
函数定义了两次
第一个定义
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 );
您不需要定义一个函数两次(调用它两次或更多次)。一个函数可以被多次调用,这就是首先要有函数的原因。干掉
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 开始。