相关疑难解决方法(0)

为什么我的包含防护不能阻止递归包含和多个符号定义?

关于包括警卫的两个常见问题:

  1. 第一个问题:

    为什么不包括保护我的头文件不受相互的,递归包含的警卫?我不断收到有关不存在的符号的错误,这些符号显然存在,甚至每次我写下类似的东西时都会出现更奇怪的语法错误:

    "啊"

    #ifndef A_H
    #define A_H
    
    #include "b.h"
    
    ...
    
    #endif // A_H
    
    Run Code Online (Sandbox Code Playgroud)

    "BH"

    #ifndef B_H
    #define B_H
    
    #include "a.h"
    
    ...
    
    #endif // B_H
    
    Run Code Online (Sandbox Code Playgroud)

    "的main.cpp"

    #include "a.h"
    int main()
    {
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

    为什么我会收到编译"main.cpp"的错误?我需要做些什么来解决我的问题?


  1. 第二个问题:

    为什么不包括防止多个定义的警卫?例如,当我的项目包含两个包含相同标题的文件时,链接器有时会抱怨多次定义某个符号.例如:

    "header.h"

    #ifndef HEADER_H
    #define HEADER_H
    
    int f()
    {
        return 0;
    }
    
    #endif // HEADER_H
    
    Run Code Online (Sandbox Code Playgroud)

    "source1.cpp"

    #include "header.h"
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    "source2.cpp"

    #include "header.h"
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    为什么会这样?我需要做些什么来解决我的问题?

c++ c++-faq include-guards header-files

70
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×1

c++-faq ×1

header-files ×1

include-guards ×1