【问题标题】:Operator Overloading for vector holding complex numbers包含复数的向量的运算符重载
【发布时间】:2018-10-22 20:34:47
【问题描述】:
#include<iostream>
#include<cmath>
#include<complex>
#include<vector>

using namespace std;

vector<complex<double> > Compute_wn(int n);
int main()

{
    Compute_wn(8);
    return 0;
}


vector<complex<double> > Compute_wn(int n)
{
    vector<complex<double> > V[n];
    for(int i = 0; i<n; i++)
    {
        V[i] = complex<double>(cos(2.0*M_PI*double(i)/double(n)),sin(2.0*M_PI*double(i)/double(n)));
        cout<<V[i]<<"\t";
    }
    cout<<"\n";
}

我是 C++ 新手。当我编译这段代码时,我得到的错误是那个错误:没有可行的重载'='。 (V[i] = complex&lt;double&gt;(cos(2.0*M_PI*double(i)/double(n)),sin(2.0*M_PI*double(i)/double(n)));) 我不明白如何为 double 类型的复数向量重载运算符 '='。据我了解,向量是复数向量,我应该能够直接分配给 V[I]。

【问题讨论】:

    标签: c++


    【解决方案1】:

    你混合了数组和向量语法,这是罪魁祸首:

    vector<complex<double>> V[n];
    

    这定义了一个 大小为 n 的数组 vector&lt;complex&lt;double&gt;&gt;。由于n 不是编译时常量,因此不应该允许这样做,但一些编译器接受它作为非标准扩展。请参阅here 进行讨论。

    这意味着V[i] 实际上是vector&lt;complex&lt;double&gt;&gt;,而不是complex&lt;double&gt;,这就是为什么你不能为它分配complex&lt;double&gt;

    解决方法是正确初始化你的向量:

    vector<complex<double>> V;
    V.resize(n);
    

    注意:您目前没有从您的函数中返回任何被声明为返回vector&lt;complex&lt;double&gt;&gt; 的东西,这将导致与未定义行为相关的问题。你的意思是return V;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多