#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这样的模拟器。
答案 0 :(得分:3)
如果定义了宏NCOMPLEX
,那么您发布的代码将导致此错误。 cs_complex_t
的两个定义都包含在#ifndef NCOMPLEX
中。因此,如果宏NCOMPLEX
是定义的,cs_complex_t
将不定义,因此当编译器在定义中遇到它时,它将是一个无法解析的标识符cs_ci_sparse
。
我会说这是文件中的逻辑错误。如果cs_complex_t
的定义取决于NCOMPLEX
的缺席,cs_complex_t
的所有用途也应取决于它。