代码之家  ›  专栏  ›  技术社区  ›  Izzo

带三个参数的typedef是什么意思?

  •  3
  • Izzo  · 技术社区  · 6 年前

    我正在尝试编译包含以下头文件的代码:

    #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;

    此发布的代码来自 reputable source 所以我想我是做错了事了。然而,我很困惑为什么typedef会使用3个参数。

    2 回复  |  直到 6 年前
        1
  •  8
  •   paxdiablo    6 年前

    是的,大多数typedef包含别名和基础类型,但是

    typedef unsigned long long int ULLI;
    //      \____________________/
    //  Many tokens for underlying type
    

    所以不管你的代码是在什么情况下工作的 double complex

    这种类型是 C标准的一部分,保存在 <complex.h> 但是等效的C++ <ccomplex>/<complex.h> 标题现在已替换为 <complex> 更适合C++,因此更合适的是包含和使用 complex<double> 键入。

    <c复杂>/<复杂。h>

    C++20 [diff.cpp17.library] ,其中详细说明了不同之处:

    更改:删除空的C++头文件。

    原理:空的报头暗示了实现C与C++头的兼容性的错误要求。

    对原始特征的影响:一个执行C++的有效C++ 2017程序 #include 属于 <ccomplex> #包括 属于 < 属于 <复杂>

        2
  •  3
  •   M.M    6 年前

    complex 不是C++中的关键字, double complex 不是类型。你正在把C++与另一种语言混合起来。

    相反,你可以使用 std::complex<double>

    推荐文章