当前位置:编程学习 > C/C++ >>

正确使用#include和前置声明(forward declaration)

正确使用#include和前置声明(forward declaration) 

当我往工程里加一个类,而且那个类又与工程里的类相关,如有那个类型的成员变量。情况如下

//////A.h///////////
class A
{
.......
};
////////B.h//////////
class B:A
{
....
A member;
}
结果,编译就会出错,说找不到类形A。解决的办法是在B.h里#include “A.h”。但是有时候不用#include “A.h”,只要在classB:A前加class A;就可以了。更严重的是不但要#include “A.h”,还要class A;。
起初觉得没问题,因为这样搞来搞去总会编译通过的,而且不会让程序变大,因为有#ifndef...#endif和#pragma once控制。直到有一次,我需要那些常量放到一个文件中“const.h”,然后include到其它需要它的类中,结果怎么也编译不成功(因为文件多了,而且每个文件都这样互相include,把我也蒙了)
直到今天终于从《Effective C++》里找到原理。现向大家分享一下,首先我以下面这个类结构作例子。(先不管我为什么不加一个Woman,为什么Man就有child,我只是作例子解说,绝没有性别歧视。
\
代码如下:
////////////main.h//////////////
#include "stdafx.h"
#include "man.h"
int main(){
    Man m;
    return 0;
}
////////////Person.h/////////////
#pragma once
class Person
{
public:
    Person(void);
    ~Person(void);
};
////////Person.cpp///////////
#include "StdAfx.h"
#include ".person.h"
Person::Person(void){
}
Person::~Person(void){
}
/////////Man.h///////////
#pragma once
#include "person.h"
class Man : public Pe
补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,