我正在为我的c ++类简介开发一个项目,即构建一个程序来计算各种统计数据。我有计算,但我们的教授希望我们使用std::istream
来收集文件的输入。程序将继续从文件中收集信息,直到它到达文件结束标记。我对std::istream
的工作方式非常不熟悉,当我尝试编译时,我一直遇到这个错误。
main.cpp:5:10:错误:调用非静态成员函数而没有 object argument stats :: getInput(std :: cin);
这是我的stats.cpp文件:
#include "stats.h"
#include <vector>
#include <cstdlib>
#include <iostream>
stats::stats(){
}
std::vector <double> stats::getInput(std::istream& input_stream){
std::vector <double> stream;
double x;
while(input_stream){
input_stream >> x;
// std::cout << "your list of numbers is: " << x << std::endl;
if(input_stream){
stream.push_back(x);
}
}
return stream;
}
这是我的头文件:
#ifndef _STATS_
#define _STATS_
#include <vector>
#include <cstdlib>
class stats{
public:
stats();
std::vector <double> getInput(std::istream& input_stream);
private:
};
#endif
这是我的main.cpp文件:
#include "stats.h"
#include <iostream>
int main(){
stats::getInput(std::cin);
}
就像我说的,我是c ++的初学者,所以答案可能相当简单,但c ++与Python有很大的不同。我见过类似的问题,但没有一个能帮助我解决这个问题。
由于
答案 0 :(得分:4)
编译器的错误消息非常清楚。
getInput
是该类的非static
成员函数。
您需要该类的对象才能使用该成员函数。
而不是
stats::getInput(std::cin);
使用
stats obj;
obj.getInput(std::cin);
另一种解决方案。
由于该类没有任何成员变量,您可以将getInput
更改为static
成员函数。
class stats {
public:
stats();
static std::vector <double> getInput(std::istream& input_stream);
private:
};
如果您这样做,您可以使用:
stats::getInput(std::cin);
此外,您读取数据的循环可以简化为:
while (input_stream >> x){
stream.push_back(x);
}