Почему этот complex.h typedef не работает? - PullRequest
0 голосов
/ 28 апреля 2020

Я ссылаюсь на опубликованный код C ++ из MIT здесь. Я пытаюсь скомпилировать код, используя предоставленный 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?

...