"invalid use of non static member function" 这是什么?

"invalid use of non static member function" What is this?

本文关键字:function 是什么 member static invalid use of non      更新时间:2023-10-16

编辑:感谢您的所有快速回复,我现在对这个概念有了更好的理解。另外,下次我会尝试使我的错误消息更清晰。编辑:使用我的最新代码更新。错误发生在第 18 行。另外,我开始怀疑我的最新问题是否与原始类本身有关?

我试图用C++自学课程和对象。我曾经通过声明一个void函数,在屏幕上输出一些东西,在main中调用对象,一切都运行良好。

现在,我想对此进行扩展,并做一个简单的补充。但是,我在代码块上遇到一些错误:

error: invalid use of non-static member function 'int Addition::add(int, int)'
error: no matching function for call to 'Addition::add()'

这是我的代码:

#include <iostream>
using namespace std;
class Addition {
public:
int add (int x, int y) {
int sum;
sum=x+y;
return sum;
}
};
int main()
{
int num1;
int num2;
int ans=addobj.add(num1,num2);
Addition addobj;
addobj.add(num1,num2);
cout<<"Enter the first number you want to add"<<endl;
cin>>num1;
cout<<"Enter the second number you want to add"<<endl;
cin>>num2;
cout<<"The sum is "<<ans<<endl;
}

开发人员应该学习做的最重要的事情之一是阅读编译器的消息。很清楚:

error: no matching function for call to 'Addition::add()'

您在类中的函数是

int add (int x, int y)

它需要 2 个参数,而您不传递任何参数:

addobj.add();

您有 2 个选项:

  • main中创建和初始化xy,并将它们作为参数传递
  • 在没有参数的情况下制作add,在add的正文中创建xy,因为它们的值取自用户输入。

在这种情况下,由于函数的名称是 add ,我选择了第一个选项:

  • main内声明int x, y;
  • 读取main内的用户输入(使用cincout的部分)
  • xy作为参数传递给add,如下所示:addobj.add( x, y );
  • 存储结果(如果需要),如下所示: int result = addobj.add( x, y );

您声明了一个将两个整数作为参数的方法add(int, int);调用它时必须提供这些参数。打印返回值也会很好:

Addition addobj;
std::cout << addobj.add(1, 2) << std::endl;

您的add函数接受两个参数,但您调用它时没有参数,因此找不到匹配的函数。 您必须按照声明的方式调用函数,即

addobj.add(1, 2);

你的函数有两个参数,但你调用它而不提供它们。您需要提供函数所需的两个整数参数。为了有用,您也应该存储结果。像这样的东西

 int a = 1;
 int b = 2;
 int result = addjobs.add(a,b);