【发布时间】:2013-07-05 23:23:54
【问题描述】:
为标题道歉,我正在努力想出一个。
我在Here 上问了一个问题,我正在尝试改进它。我有一个结构:
namespace Complex {
typedef struct complex_t {
double re;
double im;
} complex;
}
我希望将array 或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;
【问题讨论】:
-
C++ 不是 C,你可以说
struct complex { ... };并失去 typedef -
哪一行代码在您的更新中给出了错误?
标签: c++ oop templates iterator