私は、かっこ演算子をオーバーライドするクラスAを持っています。 次のコードは動作します:セグメンテーションフォルトC++、かっこ演算子の後
segmentation fault (core dumped)
私ができる:
int main(){
..
A a;
cout << a({0.5});
..
}
次のコードは、
A fun(){
..
A a;
return a;
..
}
int main(){
..
A a = fun();
cout << a({0.5});
}
を動作しませんが、私はこの第二のコードを実行すると、私は次のエラーを持っています理由を理解できない。
EDIT:実際に
FFNeuralNetwork_(Features_<InputC, denseOutput>& phi, unsigned int neurons,
unsigned int outputs) :
ParametricRegressor(phi, outputs), BatchRegressor_<InputC, arma::vec, denseOutput>(phi, outputs)
{
layerFunction.push_back(new Sigmoid());
layerFunction.push_back(new Linear());
layerNeurons.push_back(neurons);
layerNeurons.push_back(outputs);
setupNetwork();
}
そして:
virtual arma::vec operator()(const InputC& input) override
{
const arma::vec& x = params.normalizationF->normalize(Base::phi(input));
forwardComputation(x);
return params.normalizationO->restore(h.back());
}
これはコンストラクタです:これは演算子のオーバーライドである
FFNeuralNetworkだった
typedef FFNeuralNetwork_<arma::vec> FFNeuralNetwork;
クラス 私がこの例で使用したものです。ここで
実際の作業コード:
BasisFunctions basisPlane_ = IdentityBasis::generate(1);
DenseFeatures phiPlane_(basisPlane_);
FFNeuralNetwork planeNet(phiPlane_, 10, 1);
cout << planeNet({0.5});
ここで働いていませんコード:
FFNeuralNetwork createNetwork(..){
BasisFunctions basisPlane_ = IdentityBasis::generate(1);
DenseFeatures phiPlane_(basisPlane_);
FFNeuralNetwork planeNet(phiPlane_, 10, 1);
return planeNet;
}
..
FFNeuralNetwork net = createNetwork(..);
cout << net({0.5});
これを理解するには、 'class A 'のコードを参照する必要があります。 –
それは非常に長いです、私は括弧演算子のオーバーライドを投稿すれば十分だと思いますか? – Samuele
はい、コードを関連する部分にトリムします。私は、コンストラクタも括弧演算子に加えて面白いかもしれないと思う。 –