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

关于Effective C++ 2nd-条款34 将文件之间的编译依赖关系(compilation dependencies)降至最低,该怎么解决

2012-02-11 
关于Effective C++ 2nd--条款34 将文件之间的编译依赖关系(compilation dependencies)降至最低尽量以class

关于Effective C++ 2nd--条款34 将文件之间的编译依赖关系(compilation dependencies)降至最低
尽量以class声明取代class的定义。
源码如下:
//Date.h
#ifndef   DATE_H_
#define   DATE_H_

class   Date
{
public:
Date();
virtual   ~Date();
};

#endif   /*DATE_H_*/

//Address.h
#ifndef   ADDRESS_H_
#define   ADDRESS_H_

class   Address
{
public:
Address();
virtual   ~Address();
};

#endif   /*ADDRESS_H_*/

//Country.h
#ifndef   COUNTRY_H_
#define   COUNTRY_H_

class   Country
{
public:
Country();
virtual   ~Country();
};

#endif   /*COUNTRY_H_*/

//Person.h
#ifndef   PERSON_H_
#define   PERSON_H_

#include   <string>

//#include   "Date.h "
//#include   "Address.h "
//#include   "Country.h "

class   Date;
class   Address;
class   Country;

class   Person
{
private:
std::stringname_;
DatebirthDate_;
Addressaddress_;
Countrycitizenship_;
public:
Person();
virtual   ~Person();
};

#endif   /*PERSON_H_*/

//main.cpp
#include   "Person.h "

int   main()
{
return   0;
}


使用MinGW3.4.4编译,失败,
error:   field   `address_ '   has   incomplete   typedependencePerson.h
error:   field   `birthDate_ '   has   incomplete   typedependencePerson.h
error:   field   `citizenship_ '   has   incomplete   typedependencePerson.h

貌似没有书上说得那么理想,没有调用class的方法,依赖声明都不可以吗?

[解决办法]
创建了一个class类型的变量(数据成员),岂不比调用方法要更强依赖?
你还是找个《Exceptional C++》看看item 26~30吧。
你对“依赖”的理解还不正确。
[解决办法]
-------------------------------------------------
DatebirthDate_;
Addressaddress_;
Countrycitizenship_;
-------------------------------------------------
上面这样的时候只有类声明是不行的,这样你就必须include头文件了,只有类声明的时候编译器是无法知道这些对象大小,就没办法去构造Person类的对象了,换成指针就可以
-------------------------------------------------
Date * birthDate_;
Address * address_;
Country * citizenship_;
-------------------------------------------------
[解决办法]
飘过
给点分
[解决办法]
c/c++的头文件是彻头彻尾的垃圾,应该学学别的语言所采取的解决方案

热点排行