0

私は c++ が初めてで、次のコードに苦労しています。スター付きの行でエラーが発生し続けます。なぜ機能しないのかについていくつかの調査を行いましたが、役立つものは何も見つかりませんでした。何か問題を見つけて、これを修正するために何をすべきか説明してもらえますか?

// FunctionArray.cpp : Defines the entry pofloat for the console application.
//

#include "stdafx.h"
#include <string>
#include <iostream>

using namespace std;
class MathPrg{
public:
    MathPrg(float num1, float num2)
        {
         num1 = num1;
         num2 = num2;
        int choice = presentChoices();
        getAnswer(choice, num1, num2);
        }

    void getAnswer(int choice,float num1, float num2){

        typedef float (MathPrg::*f[4]) (float, float);
        **f set = {add, subtract, multiply, divide};
        float answer = (*set[choice])( num1, num2 );**
        cout<< answer;
        }

    float add(float num1, float num2){
        return num1+num2;}
    float subtract(float num1, float num2){
        return num1-num2;}
    float multiply(float num1, float num2){
        return num1*num2;}
    float divide(float num1, float num2){
        return num1/num2;}
    int presentChoices(){
        cout<<"Enter 0 to add \nEnter 1 to subtract \nEnter 2 to multiply\nEnter 3 to divide";
        int choice;
        cin>> choice;
        return choice;
        }


    };

float _tmain(float argc, _TCHAR* argv[])
{
float num1, num2;
cout<<"Enter two numbers";
        cin>> num1>> num2;

MathPrg mathP(num1, num2);
cin>>num1;
    return 0;
}

エラー: ------ ビルド開始: プロジェクト: FunctionArray、構成: Win32 のデバッグ ------ FunctionArray.cpp c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\ functionarray.cpp(22): エラー C4867: 'MathPrg::add': 関数呼び出しに引数リストがありません。'&MathPrg::add' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(22): エラー C4867: 'MathPrg::subtract ': 関数呼び出しに引数リストがありません。'&MathPrg::subtract' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(22): エラー C4867: 'MathPrg::multiply ': 関数呼び出しに引数リストがありません。使用する '&MathPrg::multiply' は、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(22): エラー C4867: 'MathPrg::divide':関数呼び出しに引数リストがありません。'&MathPrg::divide' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23): エラー C2171: '*' : 違法タイプ 'float (__thiscall MathPrg::* )(float,float)' c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23) のオペランド: エラー C2064 : term は 2 つの引数をとる関数として評価されません ========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ========== メンバーへのポインターを作成するには c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(22): エラー C4867: 'MathPrg::divide': 関数呼び出しに引数リストがありません; '&MathPrg::divide' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23): エラー C2171: '*' : 違法タイプ 'float (__thiscall MathPrg::* )(float,float)' c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23) のオペランド: エラー C2064 : term は 2 つの引数をとる関数として評価されません ========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ========== メンバーへのポインターを作成するには c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(22): エラー C4867: 'MathPrg::divide': 関数呼び出しに引数リストがありません; '&MathPrg::divide' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23): エラー C2171: '*' : 違法タイプ 'float (__thiscall MathPrg::* )(float,float)' c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23) のオペランド: エラー C2064 : term は 2 つの引数をとる関数として評価されません ========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ========== \documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(22): エラー C4867: 'MathPrg::divide': 関数呼び出しに引数リストがありません。'&MathPrg::divide' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23): エラー C2171: '*' : 違法タイプ 'float (__thiscall MathPrg::* )(float,float)' c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23) のオペランド: エラー C2064 : term は 2 つの引数をとる関数として評価されません ========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ========== \documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(22): エラー C4867: 'MathPrg::divide': 関数呼び出しに引数リストがありません。'&MathPrg::divide' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23): エラー C2171: '*' : 違法タイプ 'float (__thiscall MathPrg::* )(float,float)' c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23) のオペランド: エラー C2064 : term は 2 つの引数をとる関数として評価されません ========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ========== MathPrg::divide': 関数呼び出しに引数リストがありません。'&MathPrg::divide' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23): エラー C2171: '*' : 違法タイプ 'float (__thiscall MathPrg::* )(float,float)' c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23) のオペランド: エラー C2064 : term は 2 つの引数をとる関数として評価されません ========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ========== MathPrg::divide': 関数呼び出しに引数リストがありません。'&MathPrg::divide' を使用して、メンバーへのポインターを作成します c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23): エラー C2171: '*' : 違法タイプ 'float (__thiscall MathPrg::* )(float,float)' c:\documents and settings\chaya\my documents\visual studio 2010\projects\functionarray\functionarray\functionarray.cpp(23) のオペランド: エラー C2064 : term は 2 つの引数をとる関数として評価されません ========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ==========

4

1 に答える 1

2
void getAnswer(int choice,float num1, float num2){
    typedef float (MathPrg::*f) (float, float);
    f set[] = {&MathPrg::add, &MathPrg::subtract, &MathPrg::multiply, &MathPrg::divide};
    float answer = (this->*set[choice])( num1, num2 );
    cout << answer;
}

私にとってはうまくいきます。

クラスのメソッド ( ) のアドレスを割り当てて&MathPrg::addから、指定されたオブジェクト/インスタンスでそれを呼び出す必要があります - (this->*set[choice])( num1, num2 ),

于 2013-05-31T18:39:24.070 に答える