c++primer.plus第五版 13.4多态公有继承的(13.7~13.9程序)如何编译不过去拉

c++primer.plus第五版 13.4多态公有继承的(13.7~13.9程序)怎么编译不过去拉,//brass.h--bank account clas

c++primer.plus第五版 13.4多态公有继承的(13.7~13.9程序)怎么编译不过去拉,
//brass.h--bank account classes
#ifndef BASS_H_
#define BASS_H_

//Brass Acount Class
class Brass
{
private:
enum{MAX=35};
char fullName[MAX];
long acctNum;
double balance;
public:
Brass(const char*s="Nullbody",long an=-1,double bal=0.0);
void Deposit(double amt);
virtual void Withdraw(double amt);
double Balance()const;
virtual void ViewAcct()const;
virtual~Brass();
};

//Brass Plus Account Class
class BrassPlus:public Brass
{
private:
double maxLoan;
double rate;
double owesBank;
public:
BrassPlus(const char*s="Nullbody",long an=-1,
double bal=0.0,double ml=500,
double r=0.10);
BrassPlus(const Brass&ba,double ml=500,double r=0.1);
virtual void ViewAcct()const;
virtual void Withdraw(double amt);
void ResetMax(double m){maxLoan=m;}
void ResetRate(double r){rate=r;}
void ResetOwes(){owesBank=0;}
};
#endif


//brass.cpp--bank account class methods
#include<iostream>
#include<cstring>
#include"brass.h"

using std::cout;
using std::ios_base;
using std::endl;

//Base methods

Brass::Brass(const char*s,long an,double bal)
{
std::strncpy(fullName,s,MAX-1);
fullName[MAX-1]='\0';
acctNum=an;
balance=bal;
}
void Brass::Deposit(double amt)
{
if(amt<0)
cout<<"Neqative deposit not allowed:"
<<"deposit is cancelled.\n";
else
balance+=amt;
}
void Brass::Withdraw(double amt)
{
if(amt<0)
cout<<"Withdrawal amout must be positive:"
<<"withdrawal canceled.\n";
else if(amt<=balance)
balance-=amt;
else
cout<<"Withdramal amount of $"<<amt
<<"exceeds your balance.\n"
<<"Withdrawal canceled.\n";
}
double Brass::Balance()const
{
return balance;
}
void Brass::ViewAcct()const
{
//set up ###.## format
ios_base::fmtflags initialState=
cout.setf(ios_base::fixed,ios_base::floatfield);
cout.setf(ios_base::showpoint);
cout.precision(2);
cout<<"Client:"<<fullName<<endl;
cout<<"Account Number:"<<acctNum<<endl;
cout<<"Balance:$"<<balance<<endl;
cout.setf(initialState);// restore original format
}

//BrassPlus Methods
BrassPlus::BrassPlus(const char*s,long an,double bal,
double ml,double r):Brass(s,an,bal)
{
maxLoan=ml;
owesBank=0.0;
rate=r;
}
BrassPlus::BrassPlus(const Brass&ba,double ml,double r)
:Brass(ba)// uses implicit copy constructor
{
maxLoan=ml;
owesBank=0.0;
rate=r;
}
//redefine how ViewAcct()works
void BrassPlus::ViewAcct()const
{
//set up ###.## format
ios_base::fmtflags initialState=
cout.setf(ios_base::fixed,ios_base::floatfield);
cout.setf(ios_base::showpoint);
cout.precision(2);

Brass::ViewAcct();//display base portion
cout<<"Maximum loan:$"<<maxLoan<<endl;
cout<<"Owed to bank:$"<<owesBank<<endl;
cout<<"Loan Rate:"<<100*rate<<"%\n";
cout.setf(initialState);
}
//redefine how Withdram()works
void BrassPlus::Withdraw(double amt)
{
//set up ###.## format
ios_base::fmtflags initialState=
cout.setf(ios_base::fixed,ios_base::floatfield);
cout.setf(ios_base::showpoint);
cout.precision(2);

double bal=Balance();
if(amt<=bal)
Brass::Withdraw(amt);
else if(amt<=bal+maxLoan-owesBank)


{
double advance=amt-bal;
owesBank+=advance*(1.0+rate);
cout<<"Bank advance:$"<<advance<<endl;
cout<<"Finance charge:$"<<advance*rate<<endl;
Deposit(advance);
Brass::Withdraw(amt);
}
else
cout<<"Credit limit exceeded.Transaction cancellde.\n";
cout.setf(initialState);
}

//usebrass1.cpp--testing bank account classes
//comile with brass.cpp
#include<iostream>
#include"brass.h"

int main()
{
using std::cout;
using std::endl;

Brass Piggy("Porcelot Pigg",381299,4000.00);
BrassPlus Hoggy("Horatio Hogg",382288,3000.00);
Piggy.ViewAcct();
cout<<endl;
Hoggy.ViewAcct();
cout<<endl;
cout<<"Depositing $1000 into the Hogg Account:\n";
Hoggy.Deposit(1000.00);
cout<<"New balance:$"<<Hoggy.Balance()<<endl;
cout<<"Withdrawing $4200 from the Pigg Account:\n";
Piggy.Withdraw(4200.00);
cout<<"Pigg account balance:$"<<Piggy.Balance()<<endl;
cout<<"Withdrawing $4200 from the Hogg Account:\n";
Hoggy.Withdraw(4200.00);
Hoggy.ViewAcct();

return 0;
}




[解决办法]
改了下格式,拼写错误,还有楼主的问题。

C/C++ code
//brass.h--bank account classes#ifndef BASS_H_#define BASS_H_//Brass Account Classclass Brass{private:    enum {        MAX=35    };        char fullName[MAX];    long acctNum;    double balance;public:    Brass(const char*s = "Nullbody", long an = -1,double bal = 0.0);    void Deposit(double amt);    virtual void Withdraw(double amt);    double Balance() const;    virtual void ViewAcct() const;    virtual ~Brass();};//Brass Plus Account Classclass BrassPlus:public Brass{private:    double maxLoan;    double rate;    double owesBank;public:    BrassPlus(const char*s = "Nullbody",long an = -1,        double bal = 0.0,         double ml  = 500,        double r   = 0.10);    BrassPlus(const Brass&ba, double ml = 500,double r = 0.1);    virtual void ViewAcct() const;    virtual void Withdraw(double amt);    void ResetMax(double m){maxLoan = m;}    void ResetRate(double r){rate = r;}    void ResetOwes(){ owesBank = 0; }};#endif//brass.cpp--bank account class methods#include<iostream>#include<cstring>#include"brass.h"using std::cout;using std::ios_base;using std::endl;//Base methodsBrass::Brass(const char*s, long an, double bal){    std::strncpy(fullName, s, MAX - 1);    fullName[MAX - 1] = '\0';    acctNum = an;    balance = bal;}void Brass::Deposit(double amt){    if(amt < 0)        cout<<"Negative deposit not allowed:"        <<"deposit is canceled.\n";    else        balance += amt;}void Brass::Withdraw(double amt){    if(amt < 0)        cout<<"Withdrawal amount must be positive:"        <<"withdrawal canceled.\n";    else if(amt <= balance)        balance -= amt;    else        cout<<"Withdrawal amount of $"<<amt        <<"exceeds your balance.\n"        <<"Withdrawal canceled.\n";}double Brass::Balance() const{    return balance;}void Brass::ViewAcct() const{    //set up ###.## format    ios_base::fmtflags initialState =        cout.setf(ios_base::fixed,ios_base::floatfield);    cout.setf(ios_base::showpoint);    cout.precision(2);    cout<<"Client:"<<fullName<<endl;    cout<<"Account Number:"<<acctNum<<endl;    cout<<"Balance:$"<<balance<<endl;    cout.setf(initialState);// restore original format}//BrassPlus MethodsBrassPlus::BrassPlus(const char*s,long an,double bal,    double ml,double r):Brass(s,an,bal){    maxLoan  = ml;    owesBank = 0.0;    rate     = r;}BrassPlus::BrassPlus(const Brass&ba,double ml,double r)    :Brass(ba)// uses implicit copy constructor{    maxLoan  = ml;    owesBank = 0.0;    rate     = r;}//redefine how ViewAcct()worksvoid BrassPlus::ViewAcct()const{    //set up ###.## format    ios_base::fmtflags initialState =        cout.setf(ios_base::fixed,ios_base::floatfield);    cout.setf(ios_base::showpoint);    cout.precision(2);    Brass::ViewAcct();//display base portion    cout<<"Maximum loan:$"<<maxLoan<<endl;    cout<<"Owed to bank:$"<<owesBank<<endl;    cout<<"Loan Rate:"<<100*rate<<"%\n";    cout.setf(initialState);}//redefine how Withdram()worksvoid BrassPlus::Withdraw(double amt){    //set up ###.## format    ios_base::fmtflags initialState =        cout.setf(ios_base::fixed,ios_base::floatfield);    cout.setf(ios_base::showpoint);    cout.precision(2);    double bal;    bal = Balance();                                                 //ERROR HERE    if(amt <= bal)        Brass::Withdraw(amt);    else if(amt <= bal+maxLoan-owesBank)    {        double advance = amt - bal;        owesBank += advance*(1.0 + rate);        cout<<"Bank advance:$"<<advance<<endl;        cout<<"Finance charge:$"<<advance*rate<<endl;        Deposit(advance);        Brass::Withdraw(amt);    }    else        cout<<"Credit limit exceeded.Transaction canceled.\n";    cout.setf(initialState);}//usebrass1.cpp--testing bank account classes//compile with brass.cpp#include<iostream>#include"brass.h"int main(){    using std::cout;    using std::endl;    Brass Piggy("Porcelot Pigg", 381299, 4000.00);    BrassPlus Hoggy("Horatio Hogg", 382288, 3000.00);    Piggy.ViewAcct();    cout<<endl;    Hoggy.ViewAcct();    cout<<endl;    cout<<"Depositing $1000 into the Hogg Account:\n";    Hoggy.Deposit(1000.00);    cout<<"New balance:$"<<Hoggy.Balance()<<endl;    cout<<"Withdrawing $4200 from the Pigg Account:\n";    Piggy.Withdraw(4200.00);    cout<<"Pigg account balance:$"<<Piggy.Balance()<<endl;    cout<<"Withdrawing $4200 from the Hogg Account:\n";    Hoggy.Withdraw(4200.00);    Hoggy.ViewAcct();    return 0;} 


[解决办法]
double bal=Balance(); //=格式有问题···