こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エラーの原因が分かりません "undefined reference to"

ライブラリのヘッダファイル matrix.h
#ifndef MATRIX_H
#define MATRIX_H


#ifdef __cplusplus
extern "C"{
#endif

typedef struct{ int row,col; double *elements; } MATRIX;

extern int matrix_error_code;

extern void zero_matrix(MATRIX *a);
extern void identity_matrix(MATRIX *a);
extern void show_matrix(MATRIX *x);
extern MATRIX multiply_matrix(MATRIX *a,MATRIX *b);
extern MATRIX transposed_matrix(MATRIX *a);

#ifdef __cplusplus
}
#endif


#endif

ライブラリのソースファイル matrix.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "matrix.h"

int matrix_error_code = 0;

void zero_matrix(MATRIX *a)
{
int i,size;
double *p;
size=a->row*a->col;
if((p = malloc(sizeof(double)*size)) == NULL)
{
puts("メモリを確保できません.");
exit(0);
}
a->elements=p;
for(i=0;i<size;i++)
*p++=0;
}

void identity_matrix(MATRIX *a)
{
int i;
zero_matrix(a);
for(i=0;i<a->row;i++)
{
*(a->elements+i*a->col+i)=1.0000;
}
}

voidshow_matrix(MATRIX *x)
{
int i,j;
for(i=0;i<x->row;i++)
{
for(j=0;j<x->col;j++)
{
printf("%3.4lf ",*(x->elements+i*x->col+j));
}
printf("\n");
}
printf("\n");
}


MATRIX transposed_matrix(MATRIX *a)
{
MATRIX x;
int i,j;
double *p;
if((p = malloc(sizeof(double)*(a->row*a->col))) == NULL)
{
puts("メモリを確保できません.");
exit(0);
}
x.elements=p;
x.row=a->col;
x.col=a->row;
for(i=0;i<x.row;i++)
{
for(j=0;j<x.col;j++)
{
*p++=*(a->elements+j*x.row+i);
}
}
return x;
}

MATRIX multiply_matrix(MATRIX *a,MATRIX *b)
{
int i,j,k;
double *p;
MATRIX x;
x.row=a->row;
x.col=b->col;
if((p = malloc(sizeof(double)*(x.row*x.col))) == NULL)
{
puts("メモリを確保できません.");
exit(0);
}
x.elements=p;
for(i=0;i<x.row;i++)
{
for(j=0;j<x.col;j++)
{
for(k=0;k<a->col;k++)
{
*p += *(a->elements+i*a->col+k) * *(b->elements+k*b->row+j);
}
}
p++;

}
return x;

}

動作確認のアプリケーションファイル test_matrix.c
#include <stdio.h>
#include "matrix.h"

int main(void)
{
int i,j;
MATRIX b,c,d,f;
b.row=c.row=2;
b.col=c.col=2;
identity_matrix(&b);
identity_matrix(&c);

d=transposed_matrix(&b);
show_matrix(&d);

f=multiply_matrix(&b,&c);
show_matrix(&f);

return 0;
}

ライブラリのコンパイルまではエラーなしで出来るのですが、test_matrix.cをコンパイルすると、"undefined reference to '_transposed_matrix'"と、"undefined reference to '_multiply_matrix'"の2つが表示されてコンパイルができません。
どうかよろしくお願いします。

投稿日時 - 2009-07-20 17:37:21

QNo.5141009

困ってます

質問者が選んだベストアンサー

>extern void show_matrix(MATRIX *x);

ヘッダーファイルのこの行で、void の直後にある空白が全角になっています。
半角空白にしてください。

>ライブラリのコンパイルまではエラーなしで出来る

本当ですか?

投稿日時 - 2009-07-20 17:49:21

お礼

指摘していただいた所を変更したら、コンパイルできました。
困っていたので本当にありがとうございました。

投稿日時 - 2009-07-20 18:47:31

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問