将矢量从一个类传递给另一个类作为对象

时间:2015-05-31 18:06:05

标签: c++

我有两个课程NetGA,我想将GA的矢量传递给Netmain。请考虑以下代码。

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>&’

任何想法?

3 个答案:

答案 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