代码之家  ›  专栏  ›  技术社区  ›  KcFnMi

命名空间::变量的多个定义,即使使用ifndef

  •  0
  • KcFnMi  · 技术社区  · 6 年前

    我知道我一定是做错了什么。

    秩h

    #ifndef RANK_H
    #define RANK_H
    namespace mmi {
    int chunk;
    void rank(int my_rank);
    }
    #endif
    

    等级.cpp

    #include "rank.h"
    namespace mmi {
    //do something with chunk
    }
    

    主.cpp

    #include "rank.h"
    int main() {
        mmi::chunk = 1;
    }
    

    以及汇编的输出;

    g++ -g -Wall -std=gnu++11   -c -o main.o main.cpp
    g++ -g -Wall -std=gnu++11   -c -o rank.o rank.cpp
    mpic++ main.o rank.o  -o main
    rank.o:(.bss+0x0): multiple definition of `mmi::chunk'
    main.o:(.bss+0x0): first defined here
    collect2: error: ld returned 1 exit status
    Makefile:12: recipe for target 'main' failed
    make: *** [main] Error 1
    

    我的理解是头文件被多次包含。但我希望通过使用 #ifndef .

    那么,我能问一下这是怎么回事吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   R Sahu    6 年前

    int chunk;
    

    #include

    extern int chunk;
    

    #include "rank.h"
    namespace mmi {
       int chunk;
      //do something with chunk
    }
    
        2
  •  2
  •   john    6 年前