2012-01-13 19 views
0

我想运行这个我写的C++程序。我在Visual C++中收到以下错误:我正试图调用一个函数。这些愚蠢的编译错误的原因是什么?

1> c:\ users \ server \ desktop \ problem7 \ problem7 \ main.cpp(26):error C3867:'Payment :: getamount':function调用缺少的参数列表;使用'& Payment :: getamount'创建指向会员的指针

1> c:\ users \ server \ desktop \ problem7 \ problem7 \ main.cpp(74):error C3867:'cashPayment :: paymentDetails':函数调用缺少参数列表;使用 '& cashPayment :: paymentDetails' 来创建一个指针构件

1> C:\用户\服务器\桌面\ 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

您想购买一些括号吗? 'cp1.paymentDetails' =>'cp1.paymentDetails()'。 – 2012-01-13 22:01:21

+0

首先,您应该指出代码中哪些行(带有注释)是产生错误的行,以便人们可以轻松找到它们。 – 2012-01-13 22:01:28

+0

@KenWhite:公平地说,编译错误有行号,只有几行错误是有道理的。 – 2012-01-13 22:03:22

回答

1

在这里:

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

编译器是告诉你,你可能有意思是getamount()而不是getamount

同样在这里:

cp1.paymentDetails; 
cc1.paymentDetails; 

你可能是指:

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

其它语言不同,在C++中,当你调用一个函数,它没有参数,你还必须提供一个空的参数列表括号。

+0

大声笑我这么困我不能注意到:第 – LebTech 2012-01-13 22:02:42

1
cp1.paymentDetails; 
cc1.paymentDetails; 

错误状态“函数调用缺少参数列表”。您的函数调用确实缺少参数列表。您需要使用()调用函数:

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

错误,其内容为“‘&付款:: getamount’创建成员指针”下半年是一个‘有用’的提示,如果你意味着要使用该函数的地址,则需要使用一元运算符&(address-of)。

该提示是那里,因为操作者需要用于计算非成员函数(用于C和用于遗留代码兼容性)的地址,但它需要用于计算非静态成员函数的地址。

相关问题