我有两个课程Net
和GA
,我想将GA
的矢量传递给Net
到main
。请考虑以下代码。
class GA {
inline vector <double> get_chromosome(int i) {
return population[i];
}
}
class Net {
int counter;
Net::setWeights(vector <double> &wts){
inpHidd = wts[counter];
}
}
main(){
net.setWeights( g.get_chromosome(chromo) );
}
错误是:
Network.h:43:8: note: void Network::setWeights(std::vector<double>&)
void setWeights ( vector <double> &wts );
^
Network.h:43:8: note: no known conversion for argument 1 from ‘std::vector<double>’ to ‘std::vector<double>&’
任何想法?
答案 0 :(得分:1)
这很简单:根据标准,只有const引用可以绑定到temporaries。
g.get_chromosome(chromo)
返回一个临时的,Net::setWeights(vector <double> &wts)
尝试使用常规引用绑定到它。
这条线
如果您不打算更改矢量,Network::setWeights(std::vector<double>& wts)
应为Network::setWeights(const std::vector<double>& wts)
,或者
Network::setWeights(std::vector<double> wts)
如果你这样做。
最后一个选项是移动向量,在这种情况下,您应该使用移动语义。
答案 1 :(得分:0)
如果不知道如何宣布人口,我会说要改变人口[i];回报人口;在get_chromosome
中答案 2 :(得分:0)
我创立了答案。 实际上问题在于Net中接收端的引用。你不需要那个;如果你没有改变矢量。 @Dvid是对的。
考虑以下示例:
#include <iostream>
using namespace std;
void addone (int &x){
x = x + 10;
}
void addtwo(int x){
x = x + 10;
}
int main (){
int x = 10;
addone(x);
cout<<x;
int y = 10;
addtwo(y);
cout<<endl<<y;
}
输出是:
20
10