2012-04-28 21 views
0

行列を符号化しています。その行列のエントリーは有理係数を持つ多項式です。どんな助けでも大歓迎です。
は私が有理数と合理的な多項式は宣言している:ここではその全体が
rational_number.h有理多項式の配列のコンパイルエラー

struct long_rational{ 
    long p; 
    long q; 
    }; 

typedef struct long_rational rational; 

polynomial.h

#define MAX_DEGREE 200 

struct rational_polynomial{ 
    long degree; 
    rational coef[MAX_DEGREE]; //rational coefficients in increase power. 
}; 

typedef struct rational_polynomial polynomial; 

poly_mat.c

#include "poly_mat.h" 

#define NR_END 1 
#define FREE_ARG char* 

polynomial **poly_matrix(long nrl, long nrh, long ncl, long nch) 
/* allocates a matrix with polynomial entries in the range m[nrl..nrh][ncl..nch] */ 
{ 
    long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; 
    polynomial **m; 
    /* allocate pointers to rows */ 
    m=(polynomial **) malloc((size_t)((nrow+NR_END)*sizeof(polynomial*))); 
    if (!m) nrerror("allocation failure 1 in matrix()"); 
    m += NR_END; 
    m -= nrl; 
    /* allocate rows and set pointers to them */ 
    m[nrl]=(polynomial *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(polynomial))); 
    if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); 
    m[nrl] += NR_END; 
    m[nrl] -= ncl; 
    for (i=nrl+1; i<=nrh; i++) m[i]=m[i-1]+ncol; 
    /* return pointer to array of pointers to rows */ 
    return m; 
} 

void **free_poly_matrix(polynomial **m, long nrl, long nrh, long ncl, long nch) 
/* free a polynomial matrix allocated by poly_matrix() */ 
{ 
    free((FREE_ARG) (m[nrl]+ncl-NR_END)); 
    free((FREE_ARG) (m+nrl-NR_END)); 
} 

void init_random_poly_matrix(int **m, long nrl, long nrh, long ncl, long nch) 
/* initialize a random polynomial matrix with coefficient <=100*/ 
{ 
    long i,j; 
    long iseed = (long)time(NULL); 
    srand (iseed); 
    for (i=nrl; i<=nrh; i++) 
    { 
     for (j=ncl; j<=nch; j++) 
     { 
      m[i][j].degree=(rand()%MAX_DEGREE); 
      for (k=0;k<=MAX_DEGREE;k++) 
      { 
       m[i][j].coef[k].p = (rand()%100); 
       m[i][j].coef[k].q = (1+rand()%100); 
      } 
     } 
    } 
} 

は謎でありますエラーメッセージ:

 
gcc -Wall -c -o poly_mat.o poly_mat.c 
poly_mat.c: In function ‘init_random_poly_matrix’: 
poly_mat.c:6: error: expected declaration specifiers before ‘(’ token 
poly_mat.c:28: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
poly_mat.c:35: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
poly_mat.h:14: error: old-style parameter declarations in prototyped function definition 
poly_mat.c:51: error: expected ‘{’ at end of input 
make: *** [poly_mat.o] Error 1 

セミコロンが入力されていないpoly_mat.hが埋められています。

#ifndef POLY_MAT_H 
#define POLY_MAT_H 

#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include "nrutil.h" 
#include "rational_number.h" 
#include "polynomial.h" 

/* matrix with polynomial entries */ 
polynomial **poly_matrix(long nrl, long nrh, long ncl, long nch); 
void init_random_poly_matrix(int **m, long nrl, long nrh, long ncl, long nch); 
void **free_poly_matrix(polynomial **m, long nrl, long nrh, long ncl, long nch); 

#endif 

ここで、ドット演算子を使用して配列内の多項式のメンバーにアクセスすることはできません。
新しいエラーメッセージ:

 
gcc -Wall -c -o poly_mat.o poly_mat.c 
poly_mat.c: In function ‘init_random_poly_matrix’: 
poly_mat.c:43: error: request for member ‘degree’ in something not a structure or union 
poly_mat.c:46: error: request for member ‘coef’ in something not a structure or union 
poly_mat.c:47: error: request for member ‘coef’ in something not a structure or union 
make: *** [poly_mat.o] Error 1 

編集2:間違いを発見しました。多項式**ではなくint **として宣言します。

+0

poly_mat.hには何がありますか? –

+0

.cppファイルに 'polynomial'が表示されていますか?そして、それは実際にその時点でtypedefですか? –

+0

plz show poly_mat.h –

答えて

0

poly_mat.hを知らなくても、私はerrormessageをgrokして、poly_mat.hに構文上の誤りがあることを知りました。 init_random_poly_matrix()のプロトタイプを宣言している間に、14行目またはそれ以前にブラケット/ブレースまたはセミコロンがないと思われます。

+0

素晴らしい。ヘッダーファイルを見ずに間違いを見つけます。 – user103500