“无效使用非静态成员函数”这是什么?

时间:2012-08-08 16:45:48

标签: c++ class function syntax

编辑:感谢所有快速反应,我现在对这个概念有了更好的理解。此外,我将尝试下次更清楚我的错误消息。 编辑:用我最新的代码更新。错误发生在第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;
}

4 个答案:

答案 0 :(得分:10)

开发人员应该学会做的最重要的事情之一就是阅读编译器的消息。很明显:

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

你班上的功能是

int add (int x, int y)

它需要2个参数而你没有传递:

addobj.add();

您有两个选择:

  • x内创建并初始化ymain并将其作为参数传递
  • 在没有参数的情况下制作add,在x的正文中创建yadd,因为它们的值来自用户输入。

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

你的add函数有两个参数,但是你用无参数调用它,所以找不到匹配的函数。您必须按照声明的方式调用该函数,即

addobj.add(1, 2);

答案 3 :(得分:1)

你的函数有两个参数但是你在没有提供的情况下调用它。您需要提供函数所需的两个整数参数。为了有用,你也应该存储结果。像这样的东西

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