複素行列を読み込めるようなプログラムを作っているのですが、コンパイルすると未定義とエラーが出てしまいます。
以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
makeとした時のエラー
make: *** [matrix.o] Error 1
今したいこと
matrixmain内の、%lf + %lfiの部分を、
それぞれ実部虚部に入れたいのですが、
&mat[i][j].re, &mat[i][j].im
ではできませんでした。教えていただけるとありがたいです。
complexについては、
typedef struct complex {
double re;
double im;
} complex ;
となっております
該当のソースコード
matrixmain.c
C
1#include <stdio.h> 2#include <stdlib.h> 3#include "complex.h" 4#include "matrix.h" 5 6int main(int argc, char * argv[]){ 7 int n, m; 8 complex ** matA; 9 FILE * fp; 10 11 if(argc < 2){ 12 printf("Not enough arguments!\n"); 13 return -1; 14 } 15 16 fp = fopen(argv[1], "r"); 17 fscanf(fp,"%d %d\n",&n, &m); 18 matA = init_mat(fp, n, m); 19 fclose(fp); 20 print_mat(matA, n, m); 21 free_mat(matA, n, m); 22 23 return 0; 24}
matrix.c
#include "complex.h" #include "matrix.h" #include <math.h> #include <stdio.h> #include <stdlib.h> complex** init_mat( FILE* fp, int n, int m){ complex ** mat; mat = (complex **)malloc(sizeof(complex *) * n); for(int i = 0;i < n;i++) mat[i] = (complex *)malloc(sizeof(complex) * m); for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++) fscanf(fp, "%lf + %lfi", &mat[i][j].re, &mat[i][j].im); } return mat; } void free_mat( complex** mat, int n, int m){ for(int i = 0;i < n;i++) free(mat[i]); free(mat); } void print_mat( complex** mat, int n, int m){ for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++) printf("\tlf + %lfi", &mat[i][j].re, &mat[i][j].im); printf("\n"); } }
matrix.h
#ifndef _MATRIX #define _MATRIX typedef struct matrix { int row; ///< row number int col; ///< column number double re; double im; } matrix ; complex ** init_main( FILE *, int , int ); void free_mat( complex** , int , int ); void print_mat( complex** , int , int ); #endif
Makefile
CC= gcc RM=rm CFLAGS= -I. -Wall -Wextra -pedantic LFLAGS= -lm HEADERS= complex.h matrix.h OBJS= matrixmain.o matrix.o .SUFFIXES: .c .o .PHONY: clean %.o: %.c $(HEADERS) $(CC) -c $(CFLAGS) -o $@ $< all: matrixmain complexmain: $(OBJS) $(CC) -o $@ $(CFLAGS) $^ $(LFLAGS) clean: $(RM) -rf *.o matrixmain
complex.hは、複素数のヘッダです。
初学者で、質問するにあたりどんなコードが必要なのかも良くわかっていません。何か他に必要な情報があればおしゃってください。エラーの原因を自分でも考えたのですが、力及ばずでした。よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー