2017-08-24 4 views
0

)このページを使用して人工ニューラルネットワークを学習しようとしています(処理中ですが変換中ですそれ)いくつかのマイナーな部分を変更しながら、C++へ:http://natureofcode.com/book/chapter-10-neural-networks/しかし、私がダウンして、コードを実行したときに、私はこのエラーが出るの下:
メソッドを呼び出すときに非クラス型(空白)のメンバー(空白)のC++要求(

main.cpp: In function ‘int main()’: 
main.cpp:36:7: error: request for member ‘feedforward’ in ‘idk’, which is of non-class type ‘Perceptron()’ 
    idk->feedforward({1.0, .5}); 

を私は周りを見回しましたが、私はこのエラーしばらく取得誰かを見つけることができると思ういけませんメソッドを呼び出す コード:

#include <stdio.h> 
#include <math.h> 
#include <time.h> 
#include <stdlib.h> 
#include <vector> 

const double e = 2.71828182845904523536; 

float S(float in){ 
    return 1/(1 + pow(e, -(in))); 
} 

double fRand(double fMin, double fMax){ 
    double f = (double)rand()/RAND_MAX; 
    return fMin + f * (fMax - fMin); 
} 

struct Perceptron{ 
    Perceptron(int n); 
    std::vector<double> weights; 
    int feedforward(float inputs[]); 
}; 

Perceptron::Perceptron (int n){ 
    weights.assign(n, fRand(-1.0, 1.0)); 
} 

int Perceptron::feedforward(float inputs[]){ 
    return 0; // I have this just for testing that I can call it 
} 

int main(){ 
    srand(time(NULL)); 

    Perceptron idk(); 
    idk.feedforward({1.0, .5}); 

    return 0; 
} 
+1

最も厄介な構文解析が再び襲い掛かります! :P – Rakete1111

+0

@ Rakete1111それに深い知恵があるなら、それは私を超えています。あなたは詳しく説明できますか? – Yunnosch

+2

'Perceptron idk();'という行は、 'idk'という名前のオブジェクトの宣言ではありません。引数をとらず、 'Perceptron'を返す関数の関数プロトタイプです。括弧を削除してこれを修正してください。 – templatetypedef

答えて

1

Perceptron idk();は機能しないオブジェクトの宣言です。コンストラクタパラメータをidkに渡すか、または引数を取らないデフォルトのコンストラクタを作成します。あなたのコードからは、Perceptronをデフォルトのctorと使用していたようですので、idk宣言から()を削除して、関数の代わりにオブジェクトの宣言にし、コンストラクタからint nを削除してください。

+1

この一般的な問題の名前は、「最も厄介な構文解析」です。 – xaxxon