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

1

1 Answer

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); } 
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy