4

编辑:感谢所有快速响应,我现在对这个概念有了更好的理解。另外,下次我会尽量让我的错误信息更清楚。编辑:用我最新的代码更新。错误发生在第 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

4 回答 4

10

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

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

你在课堂上的职能是

int add (int x, int y)

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

addobj.add();

您有 2 个选项:

  • 在您的内部创建和初始化x并将它们作为参数传递ymain
  • makeadd不带参数, createxyinsideadd的主体,因为它们的值取自用户输入。

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

  • int x, y;在你的内部声明main
  • 读取main(您使用cin和的部分cout)内的用户输入
  • xandy作为参数传递给add这样的:addobj.add( x, y );
  • 存储结果(如果需要),如下所示:int result = addobj.add( x, y );
于 2012-08-08T16:47:54.790 回答
4

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

Addition addobj;
std::cout << addobj.add(1, 2) << std::endl;
于 2012-08-08T16:48:03.790 回答
1

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

addobj.add(1, 2);
于 2012-08-08T16:48:03.933 回答
1

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

 int a = 1;
 int b = 2;
 int result = addjobs.add(a,b);
于 2012-08-08T16:48:11.493 回答