在没有对象参数编译器错误的情况下调用非静态成员函数 我正在为我的C++课程介绍一个项目,它是为了构建一个程序来计算各种统计数据。我记下了计算结果,但我们的教授希望我们使用std::istream从文件中收集输入。程序将继续从文件中收集信息,直到到达文件结束标记。我对std::istream的工作方式非常不熟悉,我在尝试编译时不断遇到这个错误

在没有对象参数编译器错误的情况下调用非静态成员函数 我正在为我的C++课程介绍一个项目,它是为了构建一个程序来计算各种统计数据。我记下了计算结果,但我们的教授希望我们使用std::istream从文件中收集输入。程序将继续从文件中收集信息,直到到达文件结束标记。我对std::istream的工作方式非常不熟悉,我在尝试编译时不断遇到这个错误,c++,c++11,compiler-errors,C++,C++11,Compiler Errors,main.cpp:5:10:错误:在没有 对象参数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_s

main.cpp:5:10:错误:在没有 对象参数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;
}
#include "stats.h"
#include <iostream>

int main(){
  stats::getInput(std::cin);
}
#包括“stats.h”
#包括
#包括
#包括
stats::stats(){
}
std::vector stats::getInput(std::istream和input_流){
std::矢量流;
双x;
while(输入_流){
输入\u流>>x;

//来自编译器的错误消息非常清楚

getInput
是类的非
静态
成员函数

您需要类的对象才能使用该成员函数

而不是

stats::getInput(std::cin);
使用


另一个解决方案

由于类没有任何成员变量,您可以将
getInput
更改为
静态
成员函数

class stats {

   public:
      stats();
      static std::vector <double> getInput(std::istream& input_stream);

   private:
};

此外,您读取数据的循环可以简化为:

while (input_stream >> x){
  stream.push_back(x);
}

该函数不使用任何类成员,因此将其设置为
静态
可能是一个更好的解决方案。这不是问题所在,但以下划线开头,后跟大写字母(
\u STATS\u
)的名称和包含两个连续下划线的名称保留给实现使用。不要在代码中使用它们。
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);
}