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)就没定义了,编译器也就无法解析啦