0

私が書いたこのC++プログラムを実行しようとしています。Visual C++ で次のエラーが発生します。

1>c:\users\server\desktop\problem7\problem7\main.cpp(26): エラー C3867: 'Payment::getamount': 関数呼び出しに引数リストがありません。「&Payment::getamount」を使用してメンバーへのポインタを作成します

1>c:\users\server\desktop\problem7\problem7\main.cpp(74): エラー C3867: 'cashPayment::paymentDetails': 関数呼び出しに引数リストがありません。「&cashPayment::paymentDetails」を使用してメンバーへのポインタを作成します

1>c:\users\server\desktop\problem7\problem7\main.cpp(75): エラー C3867: 'CreditCardPayment::paymentDetails': 関数呼び出しに引数リストがありません。「&CreditCardPayment::paymentDetails」を使用してメンバーへのポインタを作成します

コードは次のとおりです。

#include <iostream>
#include <cstring>
using namespace std;

class Payment
{
private: float amount;

public: Payment(float=0.0);
        void paymentDetails();
        float getamount();
        void setamount(float);
};


Payment::Payment(float a)
{
    setamount(a);
}

void Payment::setamount(float a){amount=a;}
float Payment::getamount(){return amount;}

void Payment::paymentDetails()
{
    cout<<"The amount of payment is : "<<getamount<<"$"<<endl;
}

class cashPayment: public Payment
{
public: cashPayment(float=0.0);
        void paymentDetails();
};
cashPayment::cashPayment(float a):Payment(a){};
void cashPayment::paymentDetails()
{
    cout<<"The payment in cash is : "<<getamount()<<"$"<<endl;
}

class CreditCardPayment: public Payment
{
private: char* name;
         int creditnumber;
         int day,month,year;

public: CreditCardPayment(char[]=" ",int=0, int=0, int=0, int=0 ,float=0.0);
        void paymentDetails();
};

CreditCardPayment::CreditCardPayment(char* n, int cn, int d, int m, int y, float a):Payment(a)
{
    int l=strlen(n);
    name = new char[l+1];
    strncpy(name,n,l);
    name[l]='\0';
    creditnumber=cn;
    day=d;
    month=m;
    year=y;
}
void CreditCardPayment::paymentDetails()
{
    cout<<"Credit Card Holder Information & Payment: "<<endl;
    cout<<"Name is "<<name<<endl;
    cout<<"Credit Number is "<<creditnumber<<endl;
    cout<<"Expiration Date (Day / Month / Year) is "<<day<<"/"<<month<<"/"<<year<<endl;
    //cout<<"Payment is "<<Payment::getamount()<<"$"<<endl;
}

int main()
{
    CreditCardPayment cc1("Mohammad",936623,21,9,2011,3000);
    cashPayment cp1(4500);
    cp1.paymentDetails;
    cc1.paymentDetails;

    system("pause");
    return 0;
}
4

2 に答える 2

1

ここに:

void Payment::paymentDetails()
{
    cout<<"The amount of payment is : "<<getamount<<"$"<<endl;
}

getamount()コンパイラは、代わりに を意味していた可能性があることを伝えていますgetamount

同様にここ:

cp1.paymentDetails;
cc1.paymentDetails;

あなたはおそらく次のことを意味していました:

cp1.paymentDetails();
cc1.paymentDetails();

他のいくつかの言語とは異なり、C++ で引数を取らない関数を呼び出すときは、括弧内に空の引数リストを指定する必要があります。

于 2012-01-13T22:01:14.873 に答える
1
cp1.paymentDetails;
cc1.paymentDetails;

エラーには、「関数呼び出しに引数リストがありません」と記載されています。関数呼び出しには実際に引数リストがありません。()関数を呼び出すために使用する必要があります。

cp1.paymentDetails();
cc1.paymentDetails();

「'&Payment::getamount' to create a pointer to member」というエラーの後半部分は、関数のアドレスを取得するつもりなら、単項&(address- of) 演算子。

このヒントが存在するのは、(C との互換性のため、および従来のコードのために) 非メンバー関数のアドレスを計算するために演算子が必要ではなく、非静的メンバー関数のアドレスを計算するために必要なためです

于 2012-01-13T22:04:19.833 に答える