包含复数的向量的运算符重载
Posted
技术标签:
【中文标题】包含复数的向量的运算符重载【英文标题】: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<double>(cos(2.0*M_PI*double(i)/double(n)),sin(2.0*M_PI*double(i)/double(n)));
) 我不明白如何为 double 类型的复数向量重载运算符 '='。据我了解,向量是复数向量,我应该能够直接分配给 V[I]。
【问题讨论】:
【参考方案1】:你混合了数组和向量语法,这是罪魁祸首:
vector<complex<double>> V[n];
这定义了一个 大小为 n
的数组 vector<complex<double>>
。由于n
不是编译时常量,因此不应该允许这样做,但一些编译器接受它作为非标准扩展。请参阅here 进行讨论。
这意味着V[i]
实际上是vector<complex<double>>
,而不是complex<double>
,这就是为什么你不能为它分配complex<double>
。
解决方法是正确初始化你的向量:
vector<complex<double>> V;
V.resize(n);
注意:您目前没有从您的函数中返回任何被声明为返回vector<complex<double>>
的东西,这将导致与未定义行为相关的问题。你的意思是return V;
?
【讨论】:
以上是关于包含复数的向量的运算符重载的主要内容,如果未能解决你的问题,请参考以下文章