错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall currency::currency(enum signType,unsigned long,unsigned int)" (??0currency@@QAE@W4signType@@KI@Z),该符号在函数 "public: class currency __thiscall currency::add(class currency const &)const " (?add@currency@@QBE?AV1@ABV1@@Z) 中被引用 C:\Users\Administrator\Desktop\数据结构、算法与引用c++语言描述\第一部分 预备知识\c++回顾\课后练习题\Currency类的声明与应用\Currency类的声明与应用\Currency类的声明与应用.obj Currency类的声明与应用
currency.h源文件中的代码:
# include <iostream>
using namespace std;
enum signType{plus,minus};
class currency
{
public:
//构造函数
currency(signType theSign = plus,
unsigned long theDollars = 0,
unsigned int theCents = 0);
//析构函数
~currency(){}
void setValue(signType,unsigned long,unsigned int);
void setValue(double);
signType getSign() const {return sign;}
unsigned long getDollars() const {return dollars;}
unsigned int getCent() const {return cents;}
currency add(const currency &) const;
currency &increment(const currency &);
void output() const;
private:
signType sign;
unsigned long dollars;
unsigned int cents;
};
//给私有数据成员赋值
void currency::setValue(signType theSign,unsigned long theDollars,unsigned int theCents)
{
if(theCents>99)
throw "cents should be < 100 !";
sign=theSign;
dollars=theDollars;
cents=theCents;
}
//给私有数据成员赋值
void currency::setValue(double theAmount)
{
if(theAmount < 0){sign = minus;theAmount = -theAmount;}
else sign = plus;
dollars = (unsigned long) theAmount;
cents = (unsigned int) ((theAmount + 0.001 - dollars) * 100);
}
//把两个currency对象的值相加
currency currency::add(const currency &x) const
{
long a1,a2,a3;
currency result;
a1 = dollars * 100 + cents;
if(sign == minus)a1 = -a1;
a2 = x.dollars *100 + cents;
if(x.sign == minus)a2 = -a2;
a3 = a1 + a2;
//转化成currency对象的表达形式
if(a3 < 0){result.sign = minus;a3 = -a3;}
else result.sign = plus;
result.dollars = a3 / 100;
result.cents = a3 - result.dollars * 100;
return result;
}
//将当前的currency对象与x相加
currency& currency::increment(const currency &x)
{
*this = add(x);
return *this;
}
//输出函数
void currency::output() const
{
if(sign == minus)cout<<'-';
cout<<'$'<<dollars<<'.';
if(cents < 10)cout<<'0';
cout<<cents<<endl;
}
cpp中的代码:
// Currency类的声明与应用.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include "currency.h"
using namespace std;
int main()
{
currency g ,h(plus, 3, 50), i, j;
//使用两种形式的setValue来赋值
g.setValue(minus, 2, 25);
i.setValue(-6.45);
j = h.add(g);
h.output();
cout<<" + ";
g.output();
cout<<" = ";
j.output();cout<<endl;
return 0;
}
plus和std命名空间里的plus重名了。使用signType::plus(不够本质,可能使用其他与std里重名的名字),或者不要用using namespace std,使用using std::cout,using std::endl等。
构造函数只声明了却没有定义。
建议不要使用VC6.0,它是C++标准化前的东西,对C++的一些新语法不支持,也可能支持一些C++标准明确规定不行的语句,容易误导初学者。
C++题目求助,多选题,关于类的?
第7题选A 因为A选项如果要使用Lei duixiang定义对象,有复制构造函数时,需要显式定义无参的构造函数.B选项自定义的复制构造函数需要从引用对象复制所有数据成员数值.C选项Lei的复制构造函数的参数可以是Lei对象的const引用,也可以不是const引用.D选项复制构造函数可以在对象创建完毕后,只能在作为函数的形参,...
C++类 的问题
1.类就是对一个事物抽象出来的结果。封装,指两方面含义,一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便于外界联系,接受外界信息。2.类是面向对象程序设计的核心,它实际是...
c++中类的定义问题
在函数中定义的变量,如果不是用new创建的,那么就是建立在栈空间上的。栈上的变量在函数执行完之后,系统会按照“先进后出”的原则依次删除。如果变量是类的对象,系统会调用类的析构方法。在块中的变量会首先被删除,嵌套的块变量自里而外删除。在本程序中,解释如下:b、c、d是依次定义的,按顺...
C++类的前置声明问题
因为编码器在读到X obj;时还不知道X的大小,无法为class Y分配内存空间。如果把声明顺序反一下就可以通过了。class Y;class X{ private: Y* ptr; \/\/这里虽然Y还没有声明,但编码器知道这是一个指针,至于指向什么数据可以先不关心。};class Y{ X obj;};int main(){ Y y;return 0;} ...
C++问题求解,在类中为什么不能给数据成员初始化值:
因为类只是定义的类型, 还没有实例化,也就是没有定义类的对象(变量), 没法存储 你可以在初始化列表里进行初始化 , 而构造函数的函数体之内赋值的话, 是在初始化后,--- 至于定义成static的, 这是静态的, 所有对象共享一个副本, 程序开始执行就初始化了, 就算没有定义对象, 也有它的实例, ...
C\/C++初学者常见编译错误及其解决办法
首先,理解编译错误信息至关重要。无论是英文还是中文翻译,错误信息都是帮助解决问题的关键。耐心阅读错误描述,理解其含义,是找到解决方法的第一步。错误类型一:字符错误或缺失。这类错误通常出现在源代码中字符拼写错误或缺少必要的字符。例如,在代码的某一行末尾缺少分号,或输出字符串末尾的双引号...
C++类的继承的成员初始化问题:
根据C++类的规则:派生类的构造函数只能初始化自己的成员,而不能初始化基类的成员。当然,有时派生类从基类继承了成员,它也可以初始化其从基类继承的成员。这时要用构造函数初始化列表中包含基类名及其从基类继承的成员:即上例中的A(n)。至于你所说的赋值情况,只是在派生类中访问基类的公有成员的...
微软visual c++运行错误
一、可能的原因 代码错误:编写的代码可能存在语法错误、逻辑错误或其他类型的编程错误,这些错误可能会导致程序无法正常运行。此时,可以通过调试工具找出并修复这些错误。编译器问题:Visual C++编译器本身也可能存在问题或配置不当的情况。这可能是由于软件更新或安装过程中的问题导致的。可以尝试重新安装或...
微软VC++运行库出错怎么办?
电脑出现microsoft visual c++ runtime library错误时,通常可以通过以下几种方法来解决:首先,这类错误可能是由于系统的运行库版本过旧或者缺少特定运行库引起的。因此,更新或重新安装Visual C++ Redistributable组件是一个有效的解决办法。用户可以前往微软官网下载并安装最新版本的Visual C++ Redistributable,...
C\\C++问题(基础),望高手解答,(回答完整者额外加20~50币),具体在下面...
强制转换为结构体的指针。2、(int)a+6-c是强制转换a还是a+6-c ? (int)(a+6-c)是不是转换a+6-c?(int)a+6-c是强制转换a。 (int)(a+6-c)是转换a+6-c,转换计算结果 问题2:这7个字符的地址是强制固定的, 编译器在编译链接时 会指定的,放在常量区,运行中不可以更改的。