Reputation: 109
I am working on a project for my intro to c++ class which is to build a program to calculate various statistics. I have the calculations down, but our professor wants us to use std::istream
to collect the input from a file. The program will keep collecting information from the file until it reaches an End of File marker. I am very unfamiliar with the way std::istream
works and I keep encountering this error when I try to compile.
main.cpp:5:10: error: call to non-static member function without an object argument stats::getInput(std::cin);
Here is my stats.cpp file:
#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;
}
Here is my header file:
#ifndef _STATS_
#define _STATS_
#include <vector>
#include <cstdlib>
class stats{
public:
stats();
std::vector <double> getInput(std::istream& input_stream);
private:
};
#endif
and here is my main.cpp file:
#include "stats.h"
#include <iostream>
int main(){
stats::getInput(std::cin);
}
Like I said, I am a beginner in c++ so the answer is probably fairly simple, but c++ is vastly different than Python. I have seen similar questions, but none of them have helped me figure it out.
Thanks
Upvotes: 6
Views: 42308
Reputation: 206577
The error message from the compiler is very clear.
getInput
is a non-static
member function of the class.
You need an object of the class to be able to use that member function.
Instead of
stats::getInput(std::cin);
use
stats obj;
obj.getInput(std::cin);
Another solution.
Since the class does not have any member variables, you may change getInput
to a static
member functions.
class stats {
public:
stats();
static std::vector <double> getInput(std::istream& input_stream);
private:
};
If you do that, you may use:
stats::getInput(std::cin);
Also, your loop to read the data can be simplified to:
while (input_stream >> x){
stream.push_back(x);
}
Upvotes: 9