c++ 定义了两个类,在不同的头文件中,但是在其中一个类中使用另一个类对象的时候出现了问题

C++语言 码拜 8年前 (2016-09-15) 3521次浏览
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中的元素。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++ 定义了两个类,在不同的头文件中,但是在其中一个类中使用另一个类对象的时候出现了问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)