2012-04-28 3 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

Вы уверены, что 'polyomial' отображается в файле .cpp? И что на самом деле это typedef в этот момент? –

+0

plz показать нам poly_mat.h –

ответ

0

без knowin poly_mat.h, но я получаю сообщение об ошибке, что в poly_mat.h есть синтаксическая ошибка. Я считаю, что отсутствует или скобка/полукольцо в или перед строкой 14, объявляя прототип для init_random_poly_matrix().

+0

Awesome. Определите ошибку, не видя файл заголовка. – user103500