Visual Studio中的原因不明的语法错误

时间:2015-02-06 16:17:56

标签: c++ visual-studio

#ifndef _CXS_H
#define _CXS_H
#include <stdlib.h>
#include <limits.h>
#include <math.h>
#include <stdio.h>
#ifdef MATLAB_MEX_FILE
#include "mex.h"
#endif


#ifdef __cplusplus
#ifndef NCOMPLEX
#include <complex>
typedef std::complex<double> cs_complex_t ;
#endif
extern "C" {
#else
#ifndef NCOMPLEX
#include <complex.h>
#define cs_complex_t double _Complex
#endif
#endif

#define CS_VER 2                    /* CXSparse Version */
#define CS_SUBVER 3
#define CS_SUBSUB 0
#define CS_DATE "Jun 1, 2012"       /* CXSparse release date */
#define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2012"
#define CXSPARSE

#include "SuiteSparse_config.h"
#define cs_long_t       SuiteSparse_long
#define cs_long_t_id    SuiteSparse_long_id
#define cs_long_t_max   SuiteSparse_long_max

         ........................

typedef struct cs_ci_sparse  /* matrix in compressed-column or triplet form */
{
    int nzmax ;     /* maximum number of entries */
    int m ;         /* number of rows */
    int n ;         /* number of columns */
    int *p ;        /* column pointers (size n+1) or col indices (size nzmax) */
    int *i ;        /* row indices, size nzmax */
    cs_complex_t *x ;    /* numerical values, size nzmax */
    int nz ;        /* # of entries in triplet matrix, -1 for compressed-col */
} cs_ci ;

   ....................
#ifdef __cplusplus
}
#endif
#endif

我收到编译错误:

Error 1 error C2143: syntax error : missing ';' before '*'

为该行:

cs_complex_t *x ;    /* numerical values, size nzmax */

由于文件的大小,缺少一些不相关的部分。在此代码段中是否有可以解释此错误的内容?这个项目是像Spice这样的模拟器。

1 个答案:

答案 0 :(得分:3)

如果定义了宏NCOMPLEX,那么您发布的代码将导致此错误。 cs_complex_t的两个定义都包含在#ifndef NCOMPLEX中。因此,如果宏NCOMPLEX 定义的,cs_complex_t定义,因此当编译器在定义中遇到它时,它将是一个无法解析的标识符cs_ci_sparse

我会说这是文件中的逻辑错误。如果cs_complex_t的定义取决于NCOMPLEX的缺席,cs_complex_t的所有用途也应取决于它。