void train(vector<TrainingItem> &training_set, unsigned int max_iterations) { if (max_iterations == 0) throw invalid_argument("The maximum number of iterations cannot be 0."); unsigned int iterations(0); while (true) { if (iterations > max_iterations) break; else iterations++; int error_count = 0; for (;;) { bool output = learn(training_set.output(), training_set.inputs()); if (output != training_set.output()) error_count++; } if (error_count == 0) break; } }
train函数是本人在Perceptron.h中定义的Perceptron类的成员函数(public)。在这个形参里本人使用了TrainingItem类,该类定义在TrainingItem.h中。
#pragma once #ifndef TRAININGITEM_H #define TRAININGITEM_H #include <vector> using namespace std; class TrainingItem { public: TrainingItem(); TrainingItem(bool expected_output, const vector<double> &inputs) : output_(expected_output) { inputs_ = inputs; } bool output() const { return output_; } vector<double> & inputs() { return inputs_; } private: bool output_; vector<double> inputs_; }; #endif // TRAININGITEM_H
但是在train函数中for循环里的会报错说 1 IntelliSense: class “std::vector<TrainingItem, std::allocator<TrainingItem>>” 没有成员 “output”同样也没有”input”。而且在Perceptron.h中本人写了include”TrainingItem.h”。并且在定义的Perceptron类外(也就是Perceptron.h里class Perceptron之外)本人使用vs2010的只能关联ctrl+J能关联出本人定义的TrainingItem类,但在类内就无法关联,百度了好久都不知道为什么,问一下有高手是知道是何故吗?
解决方案
40
vector<TrainingItem> &training_set
stl 容器中的类模板 vector ,并没有定义成员函数output(),inputs()
output(),inputs()你定义的是 TrainingItem 类型的 成员函数
这跟training_set 没啥关系
要使用 这两个函数,你应该一个一个处理 容器training_set中的元素。
stl 容器中的类模板 vector ,并没有定义成员函数output(),inputs()
output(),inputs()你定义的是 TrainingItem 类型的 成员函数
这跟training_set 没啥关系
要使用 这两个函数,你应该一个一个处理 容器training_set中的元素。