![](/img/trans.png)
[英]C++ Error: no match for call to '(Vector3 (double, double, double)'
[英]vector <double> to double error in c++ code
我正在尝试返回在加权随机分布上返回的向量中的值(即,如果向量具有1,2,3,它将给出1/6的机会是1,2 / 6的机会是2,并且a 3/6的机会是3)。 我收到的编译时间错误
Protein.cpp:809:54: error: cannot convert ‘__gnu_cxx::__normal_iterator<double*, std::vector<double> >’ to ‘double’ in assignment
Protein.cpp:814:24: error: could not convert ‘((Protein*)this)->Protein::fitness1.std::vector<_Tp, _Alloc>::operator[]<double, std::allocator<double> >((std::vector<double, std::allocator<double> >::size_type)index)’ from ‘double’ to ‘std::vector<double>’
当我编译代码时,尝试修复它的运气很少。 如果有人可以看一下功能并为我提供帮助,我将不胜感激。 再次感谢您的宝贵时间!
功能
vector<double> Protein::Init_Seq_Recursive(State& s, int d)
{
vector<float> sequence;
double index;
float initial;
int i =0;
for (i; i < k; i++)
{
s[d] = i;
if (d == (L - 1))
{
int ind = Index(s);
Ef[ind] = GetEf(s);
Eb1[ind] = GetEb1(s);
Eb2[ind] = GetEb2(s);
double zf = exp(beta_f*Ef[ind]);
double zb1 = exp(beta_b*Eb1[ind]);
double zb2 = exp(beta_b*Eb2[ind]);
fitness1[ind] = (1. + f_ub*zb1 + f_ub*f_uf*zf*zb1)/( 1. + zb1 + zf*zb1 );
fitness2[ind] = (1. + f_ub*zb2 + f_ub*f_uf*zf*zb2)/( 1. + zb2 + zf*zb2 );
}
else
Init_Fitness_Recursive(s, d + 1);
}
if(i==k-1){
vector<float> weights;
float running_total = 0;
for(int y = 0; y<pow(k,L); y++){
running_total = running_total+fitness1[y];
weights.push_back(running_total);
}
double rnd = (static_cast <double> (rand()) / static_cast <double> (RAND_MAX))*running_total;
for(int y = 0; y<fitness1.size(); y++){
if(rnd<weights[y]){
index = find(fitness1.begin(), fitness1.end(), rnd);
}
}
}
return(fitness1[index]);
}
std::find
不返回索引。 它返回指向找到的元素的迭代器。 要获取index
,您需要计算begin
迭代器与找到的迭代器之间的距离。 像这样:
vector<double>::iterator found = find(fitness1.begin(), fitness1.end(), rnd);
index = distance(fitness1.begin(), found);
相当怀疑您是否会使用double
来索引容器。
另外,您的return(fitness1[index]);
正在尝试返回单个double
,但是您的返回类型为vector<double>
。
index = find(fitness1.begin(), fitness1.end(), rnd);
find
的返回值是一个迭代器。 您需要取消引用以获得double
精度(即index
的类型):
index = *find(fitness1.begin(), fitness1.end(), rnd);
// ^
其次,你试图返回一个double
从该声明为返回一个函数vector<double>
:
return( fitness1[index] );
// ^^^^^^^^^^^^^^^
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.