2

私の計画は、単純な加算計算機を作成し、そこから先に進むことでした。覚えておいてください、これは私の初日のコーディングです。

#include <iostream>
#include <string>

using namespace std;

int a;
int b;
int sum;
string ans;

class CalcClass{
public:
    int add (int a, int b) {
        cout << "Pick the numbers you want to add" << endl;
        cin >> a >> b;
        sum = a + b;
        return sum;
    }
};

追加されましstring ans;た(上部に)。今、私は"error: no matching function for call to 'CalcClass::add()'"

calcObject関数を既に作成しcalcObject.add();て呼び出していた場合、なぜこれを言っているのでしょうか?

void pickFunction(){
    cout << "What Function do you want to do? \n Add, Subtract, multiply, or divide? ";
    cin >> ans;

    if (ans == "add"){
        CalcClass calcObject;
        calcObject.add();
    }


int main(){
    pickFunction();

    cout << "Your answer is : " << sum << endl;
    return 0;
}   
4

2 に答える 2

1

ans needs a type (probably string), add needs quotes ("add"), CalcClass.calcObject; needs to be CalcClass calcObject;.

'dot' syntax (x.y) is used for accessing data or functions that are stored inside of an object, not a class (e.g. calcObject.add(); rather than CalcClass.add();).

Also, as Mahesh says, pickFunction(); needs to be in main. This should look as follows:

void pickFunction(){
    //code
}
int main() {
    pickFunction();
    //...
}
于 2012-07-05T22:21:48.527 に答える
1
CalcClass.calcObject;

オブジェクトを作成する方法ではありません。.オブジェクトのメンバー/メソッドにアクセスするには、演算子を使用する必要があります。したがって、次のようなオブジェクトを作成します-

CalcClass calcObject;

また、コンパイラが定義を確認する前にオブジェクトのインスタンス化が行われる場合、クラスの前方宣言は役に立ちません。そのため、コンパイラがCalcClasspickFunction() の前にあることを確認してください。pickFunctionそうは言っても、何か役に立つことを行うには、プログラムの from main を呼び出す必要があります。

The Definitive C++ Book Guideから本を選んで読み始めてください。

于 2012-07-05T22:18:04.567 に答える