• complex<double>编译报错


    好久没做事情,也就没什么内容可更新的。这两天开始做事情了,问题就不断地出现了,就连使用标准的complex类都出问题。先说说问题吧。

    xxxx.cpp: In member function ‘void xxxx::xxxxxxxx()’:
    xxxx.cpp:
    100: error: ISO C++ forbids declaration of ‘type name’ with no type
    xxxx.cpp:
    100: error: expected primary-expression before ‘double
    xxxx.cpp:
    100: error: expected ‘;’ before ‘double
    make:
    *** [mdqr.o] Error 1

    编译的时候报错,其实那一行就是申请一块double类型复数的数组内存,

    // xxxx.cpp
    #include <complex>
    using std::complex;
    ...
    // complex<double>* eig;
    eig = new complex<double>[N]; // this is line 100

    头文件和命名空间都使用了的阿,而且在头文件类中声明 complex<double>* eig的时候还没有报错。写一个最简单的例子,测试complex的使用。如下,

    #include <iostream>
    #include
    <complex>
    using std::complex;
    using std::cout;
    using std::endl;

    int main(){
    complex
    <double>* eig = new complex<double>[3];
    eig[
    0] = complex<double>(1,2);
    cout
    << eig[0] << endl;
    return 0;
    }

    编译通过,运行结果正确。到底是是为什么xxxx.cpp里面会出现问题呢?

    后来同学建议使用typedef complex<double> dcmplx_t;改了之后的代码如下,

    // xxxx.cpp
    #include <complex>
    using std::complex;
    typedef complex
    <double> dcmplx_t;
    ...
    // dcmplx_t* eig;
    eig = new dcmplx_t[N];

    这样就可以编译了,结果也是正确的。但还是没找到之前错误的原因。

    在ubuntu10.04上编译的,gcc-g++版本4.4.3, 程序中使用了LAPACKE库。

    那就先这样了,希望知道原因的能帮忙解释下。

  • 相关阅读:
    网络通信2
    linux下使用shell脚本输出带颜色字体
    CentOS7 yum方式安装MySQL5.7
    Prometheus 基于文件的服务发现
    k8s容器探针
    kuberntes部署metallb LoadBalancer负载均衡
    [kubernetes]-namespace 处于Terminating状态的处理方法
    Kubernetes角色访问控制RBAC和权限规则
    k8s 关联pvc到特定的pv
    k8s创建kubeconfig文件
  • 原文地址:https://www.cnblogs.com/Frandy/p/double_complex.html
Copyright © 2020-2023  润新知