C ++请求成员(空白)(空白),在调用方法时是非类型(空白)

时间:2017-08-24 00:26:45

标签: c++ function methods struct

我正在尝试使用此页面了解人工神经网络(它在处理中,但我将其转换为C ++,同时更改了一些小部分):http://natureofcode.com/book/chapter-10-neural-networks/但是当我在下面运行代码时,我得到了这个错误:

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

答案 0 :(得分:1)

Perceptron idk();是函数的声明,而不是对象。将构造函数参数传递给idk或者创建一个不带参数的默认构造函数。在您的代码中,您似乎打算将Perceptron与默认ctor一起使用,因此您应该从()声明中删除idk,以使其成为对象的声明,而不是从int n构造函数中删除Perceptron