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中的元素。