0

我正在摆脱我的常规领域来做到这一点,而且我遇到了一些愚蠢的复杂情况。我已经声明了一个具有变量“int activacion”的类,然后我创建了另一个具有前一种类型对象向量的类。然后我做了另一个类,它有一个最新的向量。如果我无法继续,我会发现它完全正常,但问题是我在使用 getValue() 读取值时没有遇到问题,而且我似乎无法使用同一行更改它带有 setValue() 的代码;

getElementoVectorCapas(i).getElementoVectorNeuronas(j).getActivacion()<<endl;

这行得通。

getElementoVectorCapas(1).getElementoVectorNeuronas(0).setActivacion(1);

这没有。这就像价值是固定的。它可以编译,它只是不改变值。提前致谢。我只剪切并粘贴了似乎相关的部分。仅在签名上添加 & 符号不会让我编译。

class CNeurona{
  private:      
      int activacion;
  public:
     void setActivacion(int x){
            activacion = x;
            }
       int getActivacion(){
           return activacion;
 }
 };  
 class CCapa{
  private:          
      std::vector<CNeurona> vectorNeuronas;
  public:
         CCapa(int i_numNeuronas, int i_numeroInputsPorNeurona){
             setNumNeuronas(i_numNeuronas);
             for(c=0;c<i_numNeuronas;c++){                        
                    vectorNeuronas.push_back(CNeurona(i_numeroInputsPorNeurona));                   
                   }             
             }                 
         CNeurona getElementoVectorNeuronas(int x){
                return vectorNeuronas[x];
                }
};
   class CRed{
  private:              
          std::vector<CCapa> vectorCapas;
 public:
 void setVectorEntrada(){                 

              for(j=0;j<numNeuronasEntrada;j++){
                   cout<<"Introduce activaciones de capa de entrada, N"<<j<<": "<<endl;
                   cin >> i;       
getElementoVectorCapas(0).getElementoVectorNeuronas(j).setActivacion(i);                                          
                   }                                    
4

1 回答 1

2
CNeurona getElementoVectorNeuronas(int x)

返回向量中对象的副本。CNeurona你打电话时

getElementoVectorNeuronas(j).setActivacion(i);

您在对象的副本上调用该setActivation方法,由 返回,该副本随后被丢弃。CNeuronagetElementoVectorNeuronas

您需要改用参考;你的功能应该是

CNeurona& getElementoVectorNeuronas(int x)

如果getElementoVectorCapas也返回一个副本 - 在你的情况下这是一个错误,它应该返回一个引用。

于 2012-09-09T13:25:54.093 回答