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 に答える