首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++默认构造函数,编译器报错,求指导!多谢

2012-03-16 
C++默认构造函数,编译器报错,求指导!谢谢!//该程序用于演示Money类#include stdafx.h#include iostream

C++默认构造函数,编译器报错,求指导!谢谢!
//该程序用于演示Money类
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cctype>
using std::cout;
using std::cin;
using std::endl;
using std::istream;
using std::ostream;

//表示美元金额的类
class Money
{
public:
friend Money add(Money amount1, Money amount2);
//前条件:amount1和amount2已被赋值
//返回amount1和amount2的值的总和

friend bool equal(Money amount1, Money amount2);
//前条件:amount1和amount2已被赋值
//如果amount1和amount2具有相同的值,就返回ture;否则返回false

Money (long dollars, int cents);
//初始化对象,根据参数中的美元和美分数额来表示一个金额
//如果金额是负数,那么美元和美分都必须为负

Money(long dollars);
//初始化对象,使它的值表示为$dollars.00

Money();
//初始化对象,使它的值表示为$0.00

double get_value();
//前条件:调用对象已被赋值
//返回在调用对象的数据中记录的金额

void input(istream& ins);
//前条件:如果ins是一个文件输出流,那么ins已经连接到一个文件
//在输入流ins中,已输入了一个金额,其中包括美元符号
//负数金额的表示方式为-$100.00
//后条件:调用对象的值被设为来自输入流ins的金额

void output(ostream& outs);
//前条件:如果outs是一个文件输出流,那么outs已经连接到一个文件
//后条件:调用对象中记录的美元符和金额将发送到输出流outs
private:
long all_cents;
};

int digit_to_int(char c);
//Money::intput的定义中要用到的函数的函数声明
//前条件:c是'0'-'9'的一个数字
//返回与该数位对应的整数:例如,digit_to_int('3')返回3

int main()
{
Money your_amount, my_amount(10,9),our_amount;
cout<<"Enter an amount of money: ";
your_amount.input(cin);
cout<<"Your amount is ";
your_amount.output(cout);
cout<<endl;
cout<<"My amount is ";
my_amount.output(cout);
cout<<endl;

if (equal(your_amount, my_amount))
cout<<"We have the same amounts.\n";
else
cout<<"One of us is richer.\n";
our_amount=add(your_amount,my_amount);
your_amount.output(cout);
cout<<" + ";
my_amount.output(cout);
cout<<" equals ";
our_amount.output(cout);
cout<<endl;
return 0;
}

Money add(Money amount1, Money amount2)
{
Money temp;
temp.all_cents=amount1.all_cents+amount2.all_cents;
return temp;
}

bool equal(Money amount1, Money amount2)
{
return (amount1.all_cents==amount2.all_cents);
}

Money::Money(long dollars, int cents)
{
if(dollars*cents<0) //如果一个为负,一个为正
{
cout<<"Illegal values for dollars and cents.\n";
exit(1);
}
all_cents=dollars*100+cents;
}

Money::Money(long dollars):all_cents(dollars*100)
{
//主体有意留空
}


Money::Money():all_cents(0)
{
//主体有意留空
}


double Money::get_value()
{
return(all_cents*0.01);
}

//使用iostream,cctype,cstdlib:
void Money::input(istream& ins)
{
char one_char,decimal_point,digit1,digit2; //代表美分数额的数字
long dollars;
int cents;
bool negative; //如果输入负数,就设为true

ins>>one_char;
if(one_char=='-')
{
negative=true;
ins>>one_char; //读入'$'
}
else
negative=false; //如果输入合法,那么one_char=='$'
ins>>dollars>>decimal_point>>digit1>>digit2;
if(one_char!='$'||decimal_point!='.'||!isdigit(digit1)||!isdigit(digit2))
{
cout<<"Error illegal form for money input\n";
exit(1);
}
cents=digit_to_int(digit1)*10+digit_to_int(digit2);
all_cents=dollars*100+cents;
if(negative)
all_cents=-all_cents;
}

//使用cstdlib和iostream:
void Money::output(ostream& outs)
{
long positive_cents,dollars,cents;
positive_cents=labs(all_cents);
dollars=positive_cents/100;
cents=positive_cents%100;
if(all_cents<0)
outs<<"-$"<<dollars<<'.';


else
outs<<"$"<<dollars<<'.';
if(cents<10)
outs<<'0';
outs<<cents;
}

int int_to_digit(char c)
{
return (static_cast<int>(c)-static_cast<int>('0'));
}


[解决办法]

C/C++ code
#include "stdafx.h"#include <iostream>#include <cstdlib>#include <cctype>using std::cout;using std::cin;using std::endl;using std::istream;using std::ostream;//表示美元金额的类class Money{public:    friend Money add(Money amount1, Money amount2);    //前条件:amount1和amount2已被赋值    //返回amount1和amount2的值的总和        friend bool equal(Money amount1, Money amount2);    //前条件:amount1和amount2已被赋值    //如果amount1和amount2具有相同的值,就返回ture;否则返回false        Money (long dollars, int cents);    //初始化对象,根据参数中的美元和美分数额来表示一个金额    //如果金额是负数,那么美元和美分都必须为负        Money(long dollars);    //初始化对象,使它的值表示为$dollars.00        Money();    //初始化对象,使它的值表示为$0.00        double get_value();    //前条件:调用对象已被赋值    //返回在调用对象的数据中记录的金额        void input(istream& ins);    //前条件:如果ins是一个文件输出流,那么ins已经连接到一个文件    //在输入流ins中,已输入了一个金额,其中包括美元符号    //负数金额的表示方式为-$100.00    //后条件:调用对象的值被设为来自输入流ins的金额        void output(ostream& outs);    //前条件:如果outs是一个文件输出流,那么outs已经连接到一个文件    //后条件:调用对象中记录的美元符和金额将发送到输出流outsprivate:    long all_cents;};int digit_to_int(char c);//Money::intput的定义中要用到的函数的函数声明//前条件:c是'0'-'9'的一个数字//返回与该数位对应的整数:例如,digit_to_int('3')返回3int main(){    Money your_amount, my_amount(10,9),our_amount;    cout<<"Enter an amount of money: ";    your_amount.input(cin);    cout<<"Your amount is ";    your_amount.output(cout);    cout<<endl;    cout<<"My amount is ";    my_amount.output(cout);    cout<<endl;        if (equal(your_amount, my_amount))        cout<<"We have the same amounts.\n";    else        cout<<"One of us is richer.\n";    our_amount=add(your_amount,my_amount);    your_amount.output(cout);    cout<<" + ";    my_amount.output(cout);    cout<<" equals ";    our_amount.output(cout);    cout<<endl;    return 0;}Money add(Money amount1, Money amount2){    Money temp;    temp.all_cents=amount1.all_cents+amount2.all_cents;    return temp;}bool equal(Money amount1, Money amount2){    return (amount1.all_cents==amount2.all_cents);}Money::Money(long dollars, int cents){    if(dollars*cents<0) //如果一个为负,一个为正    {        cout<<"Illegal values for dollars and cents.\n";        exit(1);    }    all_cents=dollars*100+cents;}Money::Money(long dollars):all_cents(dollars*100){    //主体有意留空}Money::Money():all_cents(0){    //主体有意留空}double Money::get_value(){    return(all_cents*0.01);}//使用iostream,cctype,cstdlib:void Money::input(istream& ins){    char one_char,decimal_point,digit1,digit2; //代表美分数额的数字    long dollars;    int cents;    bool negative; //如果输入负数,就设为true        ins>>one_char;    if(one_char=='-')    {        negative=true;        ins>>one_char; //读入'$'    }    else        negative=false; //如果输入合法,那么one_char=='$'    ins>>dollars>>decimal_point>>digit1>>digit2;    if(one_char!='$'||decimal_point!='.'||!isdigit(digit1)||!isdigit(digit2))    {        cout<<"Error illegal form for money input\n";        exit(1);    }    cents=digit_to_int(digit1)*10+digit_to_int(digit2);    all_cents=dollars*100+cents;    if(negative)        all_cents=-all_cents;}//使用cstdlib和iostream:void Money::output(ostream& outs){    long positive_cents,dollars,cents;    positive_cents=labs(all_cents);    dollars=positive_cents/100;    cents=positive_cents%100;    if(all_cents<0)        outs<<"-$"<<dollars<<'.';    else        outs<<"$"<<dollars<<'.';    if(cents<10)        outs<<'0';    outs<<cents;}int digit_to_int(char c){    return (static_cast<int>(c)-static_cast<int>('0'));} 


[解决办法]
Money::Money():all_cents(0)
你all_cents后面的是中文的()
[解决办法]
你声明时用的是 int digit_to_int(char c);
并且调用了 int digit_to_int(char c);

然而 你实现的却是
int int_to_digit(char c)
{
 return (static_cast<int>(c)-static_cast<int>('0'));
}
这样int digit_to_int(char c)就没定义了,编译器也就无法解析啦

热点排行