4

編集:すべての迅速な対応に感謝します。私は今、この概念をよりよく理解しています。また、次回はエラー メッセージをより明確にするように努めます。編集:最新のコードで更新されました。エラーは 18 行目で発生します。また、最新の問題が元のクラス自体に関係しているのではないかと考え始めています。

C++ でクラスとオブジェクトを独学しようとしています。関数を宣言しvoid、画面に何かを出力し、メインでオブジェクトを呼び出して、すべてがうまくいきました。

さて、これを拡張して簡単な追加をしたいと思いました。ただし、コード ブロックでいくつかのエラーが発生します。

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

開発者が学ぶべき最も重要なことの 1 つは、コンパイラのメッセージを読むことです。それは十分に明らかです:

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

あなたのクラスでのあなたの機能は

int add (int x, int y)

2 つの引数を取り、何も渡さない:

addobj.add();

次の 2 つのオプションがあります。

  • 作成して初期化xし、y内部mainでそれらを引数として渡します
  • addパラメータなしで作成しx、値がユーザー入力から取得されるため、 の本体y内で作成します。add

この場合、関数の名前はaddであるため、最初のオプションを選択します。

  • int x, y;あなたの中で宣言するmain
  • 内部のユーザー入力を読み取りますmain(使用する部分cincout)
  • xandyを引数として次のaddように渡します。addobj.add( x, y );
  • 次のように、結果を保存します (必要な場合)。int result = addobj.add( x, y );
于 2012-08-08T16:47:54.790 に答える
4

add(int, int)2 つの整数を引数として取るメソッドを宣言しました。呼び出すときに、これらの引数を指定する必要があります。同様に、返された値を出力するとよいでしょう:

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

add関数は 2 つの引数を取りますが、何も指定せずに呼び出しているため、一致する関数が見つかりませんでした。宣言されたとおりに関数を呼び出す必要があります。つまり、

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

関数は 2 つの引数を取りますが、引数を指定せずに呼び出します。関数に必要な 2 つの整数引数を指定する必要があります。有用であるためには、結果も保存する必要があります。このようなもの

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