【发布时间】:2020-04-28 00:10:46
【问题描述】:
我正在尝试编译包含以下头文件的代码:
#ifndef FFT_H
#define FFT_H
#include<cmath>
#include<complex.h>
#include<vector>
#define Vec(a, b) std::vector<__typeof(*(a))> ((a), (a)+(b))
typedef double complex complex_t; // this is my trouble line!
typedef double real_t;
#endif
我的编译器被typedef double complex complex_t; 绊倒了
这对我来说很有意义,因为大多数 typedef 只包含两个参数:类型和别名。
这个发布的代码来自reputable source,所以我认为我做错了什么。但是,我对为什么 typedef 会使用 3 个参数感到困惑。
【问题讨论】:
-
typedef unsigned long long int ull;— 五个参数? (可疑的命名法——它们并不是真正的论点——但这是一个单独的话题。) -
您的问题是您在大概是 C++ 编译中包含了 C 标头
<complex.h>。 C++ 有自己的头文件<complex>,它定义了您应该在 C++ 中使用的复杂类型。您不应该尝试使用 C 类型。 -
@JonathanLeffler:最后我检查了一下,这在技术上是无效的 C++,尽管每个编译器都支持它
-
@JonathanLeffler 我同意你的看法。但是,
似乎没有包含正确的 typedef 定义。 -
@MooingDuck 任何有效的变量或函数声明(没有初始化程序)都可以在其前面加上
typedef。规范没有说明您声称的内容。声明语法的规范在decl-specifiers中包含typedef(可以是任意数量),typedefs没有特殊语法
标签: c++ macros g++ c-preprocessor