Я пытаюсь вызвать функцию.В чем причина этих глупых ошибок компиляции? - PullRequest
0 голосов
/ 14 января 2012

Я пытаюсь запустить эту программу на С ++, которую написал. Я получаю следующие ошибки в 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;
}

Ответы [ 2 ]

1 голос
/ 14 января 2012
cp1.paymentDetails;
cc1.paymentDetails;

В сообщении об ошибке указано «список отсутствующих аргументов при вызове функции».В ваших вызовах функций действительно отсутствуют списки аргументов.Вам необходимо использовать () для вызова функций:

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

Вторая половина ошибки, которая гласит «& Payment :: getamount 'для создания указателя на член», является «полезной» подсказкойчто если вы намеревались взять адрес функции, вам нужно использовать унарный оператор & (address-of).

Этот совет есть, потому что оператор не требуетсядля вычисления адреса функции, не являющейся членом (для совместимости с C и для унаследованного кода), но это требуется для вычисления адреса функции, не являющейся статической.

1 голос
/ 14 января 2012

Здесь:

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

компилятор говорит вам, что вы могли иметь в виду getamount() вместо getamount.

Аналогично здесь:

cp1.paymentDetails;
cc1.paymentDetails;

вы, вероятно, имели в виду:

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

В отличие от некоторых других языков, в C ++ при вызове функции, которая не принимает аргументов, вы все равно должны предоставить пустой список аргументов в скобках.

...