调用非静态成员函数而没有对象参数编译器错误

Bro*_*son 3 c++ compiler-errors c++11

我正在为我的 C++ 类介绍项目工作,该项目将构建一个程序来计算各种统计数据。我已经完成了计算,但我们的教授希望我们用来std::istream从文件中收集输入。程序将不断从文件中收集信息,直到到达文件结束标记为止。我对工作方式非常不熟悉,std::istream当我尝试编译时,我一直遇到这个错误。

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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的头文件:

#ifndef _STATS_
#define _STATS_
#include <vector>
#include <cstdlib>

class stats{

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

 private:



};

#endif
Run Code Online (Sandbox Code Playgroud)

这是我的 main.cpp 文件:

#include "stats.h"
#include <iostream>

int main(){
  stats::getInput(std::cin);
}
Run Code Online (Sandbox Code Playgroud)

就像我说的,我是 C++ 的初学者,所以答案可能相当简单,但 C++ 与 Python 有很大不同。我见过类似的问题,但没有一个能帮助我弄清楚。

谢谢

R S*_*ahu 5

来自编译器的错误信息非常清楚。

getInput是类的非static成员函数。

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

代替

stats::getInput(std::cin);
Run Code Online (Sandbox Code Playgroud)

stats obj;
obj.getInput(std::cin);
Run Code Online (Sandbox Code Playgroud)

另一种解决方案。

由于该类没有任何成员变量,您可以更改getInputstatic成员函数。

class stats {

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

   private:
};
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你可以使用:

stats::getInput(std::cin);
Run Code Online (Sandbox Code Playgroud)

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

while (input_stream >> x){
  stream.push_back(x);
}
Run Code Online (Sandbox Code Playgroud)

  • 该函数不使用任何类成员,因此将其设为“静态”可能是更好的解决方案 (2认同)