为什么这个complex.h typedef不起作用?

问题描述 投票:0回答:1

我一直在从MIT引用发布的C ++代码here.我正在尝试使用提供的Makefile编译代码。注意我正在使用Ubuntu 20.04版并安装了g ++。

从我在此处发布的上一个问题来看,代码似乎在包含的标头之一中的typedef上跳了起来:

#ifndef FFT_H
#define FFT_H

#include<cmath>
#include<complex.h>
#include<vector>

#define Vec(a, b) std::vector<__typeof(*(a))> ((a), (a)+(b))

// allow easy change to float or long double
//#define USE_FLOAT
#define USE_DOUBLE

#ifdef USE_FLOAT
typedef float complex complex_t;
typedef float real_t;
#define cexp cexpf
#define exp expf
#endif


#ifdef USE_DOUBLE
typedef double complex complex_t; // this is the trouble line!
typedef double real_t;
#endif

//#define DEBUG

#endif

编译器抱怨double complex不是有效的类型,因此不会定义complex_t

现在,最初的假设是应该用或代替,但是,这不能解决问题。无论更改此标头,编译器都会在typedef double complex complex_t;行上跳闸。

现在,在使用Make时,我也是菜鸟。我正在尝试使用以下Makefile(已提供)编译代码:

CC=g++
RM=rm -f
#CXXFLAGS=-Wall -Wconversion -g
CXXFLAGS=-Wall -Wconversion -O2
LDFLAGS=-g
LDLIBS=-lfftw3 -lfftw3f -lm -lrt

DESTS=experiment generate_graphs kaiserbessel
SRCS:=$(filter-out $(DESTS:%=%.cc), $(wildcard *.cc))
OBJS:=$(subst .cc,.o,$(SRCS))

all: $(DESTS)

我目前的假设是源代码使用的是脏C ++,因此包含complex.h(请注意,其余代码肯定是C ++而不是C)。但是,我也想知道设置g ++时是否做错了什么,并下载了与Makefile对应的编译器版本不同的编译器版本。

关于如何解决此typedef问题的任何想法?

c makefile typedef complex.h
1个回答
1
投票

在较新的C ++版本中,complex是预先存在的固有类型,例如intdouble。因此,您无需定义它。

似乎您正在使用较新的C ++编译器编译此代码,并尝试从complex类型存在之前开始编译旧代码。

© www.soinside.com 2019 - 2024. All rights reserved.