包含复数的向量的运算符重载

时间:2018-10-22 20:34:48

标签: c++

#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<double>(cos(2.0*M_PI*double(i)/double(n)),sin(2.0*M_PI*double(i)/double(n)));)我不明白对于双精度复数类型的向量,如何需要重载运算符'='。据我了解,向量是复数的向量,我应该可以直接将其分配给V [I]。

1 个答案:

答案 0 :(得分:5)

您正在混合数组和向量语法,这是罪魁祸首:

ion-item {
  overflow-y: visible
}

这定义了大小为ion-item { overflow: visible } 的{​​{1}} 的数组。由于vector<complex<double>> V[n]; 不是编译时常量,因此不应允许该常量,但是某些编译器将其视为非标准扩展。参见here进行讨论。

这意味着n实际上是vector<complex<double>>,而不是n,这就是为什么您不能为其分配V[i]的原因。

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

vector<complex<double>>

注意:您当前未从函数中返回声明为返回complex<double>的任何内容,这将导致与行为不确定相关的严重问题。你是说complex<double>吗?