关于.h文件相互包含的一个现象

来源:互联网 发布:淘宝纯棉定义 编辑:程序博客网 时间:2024/06/06 01:17

假设现在有四个文件,内容分别如下:
test1.h

#pragma once#include "test2.h"class A{public:    int function1(struct_B bb);};

test1.cpp

#include "test1.h"using namespace std;int A::function1(struct_B bb){    cout<<bb.str_a<<endl;    return 1;}int main(){    struct_B bb;    bb.str_a = "123";    A aa;    aa.function1(bb);    cin.get();}

test2.h

#pragma once#include <Windows.h>#include "string"#include "iostream"#include "test1.h"struct struct_B{    std::string str_a;};

test2.cpp

#include "test2.h"

在上面的这种情况下,vs2012编译会提示找不到标识符“struct_B”
这应该是重复包含的问题,test2.h作为被使用的部分,那么就不应该包含test1.h文件.
在每个头文件里面添加#pragma once是没有错的.

所以以后code的过程中,要更加考虑整个工程的结构.不要只要暂时实现某个功能就将头文件随意包含,当工程变得复杂繁琐以后,更改起来牵扯到的工作量将会非常大.

原创粉丝点击