有理多项式数组的编译错误

Posted

技术标签:

【中文标题】有理多项式数组的编译错误【英文标题】:Compilation Error for an array of rational polynomials 【发布时间】:2012-04-28 08:25:29 【问题描述】:

我正在编写一个矩阵,其条目是具有有理系数的多项式。任何帮助将不胜感激。 我声明了有理数和有理多项式: 有理数.h

struct long_rational
    long p;
    long q;
    ;

typedef struct long_rational rational;

多项式.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:在函数“init_random_poly_matrix”中: poly_mat.c:6:错误:“(”标记之前的预期声明说明符 poly_mat.c:28:错误:在“”标记之前应为“=”、“,”、“;”、“asm”或“__attribute__” poly_mat.c:35:错误:在“”标记之前应为“=”、“,”、“;”、“asm”或“__attribute__” poly_mat.h:14:错误:原型函数定义中的旧式参数声明 poly_mat.c:51:错误:输入结束时应为“” 制作:*** [poly_mat.o] 错误 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:在函数“init_random_poly_matrix”中: poly_mat.c:43:错误:请求成员“学位”不是结构或联合 poly_mat.c:46:错误:在非结构或联合的情况下请求成员“coef” poly_mat.c:47:错误:在不是结构或联合的东西中请求成员“coef” 制作:*** [poly_mat.o] 错误 1

编辑 2:发现错误。将其声明为 int** 而不是多项式**。

【问题讨论】:

您确定polynomial 在.cpp 文件中可见吗?并且它实际上是那个时候的 typedef? 这段代码中似乎有很多小错误会阻止编译(或至少给出编译器警告),这表明您设计了代码并在没有测试任何内容的情况下将其全部输入. 从小处着手,逐步构建,在每个阶段进行测试,永远不要添加不起作用的代码。 【参考方案1】:

不知道 poly_mat.h,但我发现了错误消息,poly_mat.h 中存在语法错误。我相信在声明 init_random_poly_matrix() 的原型时,第 14 行或之前缺少括号/大括号或分号。

【讨论】:

太棒了。不看头文件就发现错误。

以上是关于有理多项式数组的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

java 数组类比较编译报错问题

c中多维数组的编译器错误

使用动态数组排序算法编译器错误

从数组分配值时字符数组编译时错误

ISO C++ 禁止可变大小数组(编译错误)

使用 typedef、多维数组和指针时出现编译器错误