为标题道歉,我正在努力想出一个。
我在这里问了一个问题,我正在尝试改进它。我有一个结构:
namespace Complex {
typedef struct complex_t {
double re;
double im;
} complex;
}
我希望将 aarray
或 a推回复数的vector
一维向量,如下所示:
template<typename Iterator>
vector<Complex::complex> convertToComplex(Iterator begin, Iterator end)
{
vector<Complex::complex> vals12(10);
for(auto i=begin; (i != end); i++)
{
vals12[i].re = *i;
}
return vals12;
}
并得到以下错误:
no viable overloaded operator[] for type 'vector<Complex::complex>'
vals12[i].re = *i;
现在请注意,如果我执行以下操作:
vals12[0].re = 10;
可以,但是,当使用数组时,它会抛出这个错误,我不明白为什么会这样。我唯一的想法是,这可能是因为我正在通过一个array
通道而不是一个向量。这是完整的代码:
#include <iostream>
#include <vector>
#include "complex.h"
using namespace std;
//using namespace Complex;
template<typename Iterator>
vector<Complex::complex> convertToComplex(Iterator begin, Iterator end)
{
vector<Complex::complex> vals12(10);
for(auto i=begin; (i != end); i++)
{
vals12[i].re = *i;
}
return vals12;
}
class Value
{
public:
template <typename Fred>
Value(Fred begin, Fred end)
{
vector<Complex::complex> vec = convertToComplex(begin, end);
}
};
int main()
{
double vals[] = {10, 23, 23, 34, 354};
Value v(std::begin(vals), std::end(vals));
}
有人对我哪里出错有任何想法吗?我真的希望有人能帮助我。
更新:
template<typename Iterator>
vector<Complex::complex> convertToComplex(Iterator begin, Iterator end)
{
vector<Complex::complex> vals12(10);
size_t index = 0;
for(auto i=begin; (i != end); i++)
{
complex c;
c.re = *i;
c.im = *i;
vals12[index].re = c.re;
vals12[index].im = c.im;
index++;
}
return vals12;
}
错误:
error: assigning to 'double *' from incompatible type 'double'; remove *
c.re = *i;