none
为什么我的变量全部是“重复定义”找了半天不知道在哪重复了。 RRS feed

  • 问题

  • 我建的是MFC程序,基于对话框的。

    在rw.h里定义了几个全局变量。和类还有 两个函数。(学习不长,代码很不规范)

    在tempDlg.cpp里(就是双击控件跳到可以写代码的那个文件里,)

    #include "rw.h"

    然后实例化类用里面的函数。

    在Debug下调 试正常

    我转到Release下就提示rw.h里的变量全部重复定义,像这样:

    1>tempDlg.obj : error LNK2005: "int Fa" (?Fa@@3HA) 已经在 rw.obj 中定义
    1>tempDlg.obj : error LNK2005: "int ChiJiuLi" (?ChiJiuLi@@3HA) 已经在 rw.obj 中定义

    我禁用的rw.h里的所有类和函数,只留下了,那些全局变量,还是出错。

    只有在tempDlg.cpp里,注释掉#include "rw.h"这句才正常。

    为什么?

    我实在不知道哪里又重复定义了。。。。

    (新人,多多指点。谢谢)

    2013年1月20日 15:35

答案

  • 在.h文件中:

    extern int Fa;
    extern int ChiJiuLi;
    随便找个cpp文件:
    int Fa;
    int ChiJiuLi

    2013年1月21日 1:44
  • 你好,

    头文件(.h)文件一般是用于声明,而不用于定义。原因在于,编译器在编译的时候,会把头文件里的代码在它被#include的地方展开。如果这个头文件被多个源文件包含,那么头文件中定义的东西也就在这些源文件中被重复定义多次。

    因此,全局变量应该定义在一个源文件中,其他源文件要使用的时候用extern声明即可。extern关键字声明一个变量,是告诉编译器有这个变量存在,但是他是在另一个模块中定义的。


    Damon Zheng
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 angel725 2013年1月21日 7:47
    2013年1月21日 7:00
    版主

全部回复

  • 在.h文件中:

    extern int Fa;
    extern int ChiJiuLi;
    随便找个cpp文件:
    int Fa;
    int ChiJiuLi

    2013年1月21日 1:44
  • 你好,

    头文件(.h)文件一般是用于声明,而不用于定义。原因在于,编译器在编译的时候,会把头文件里的代码在它被#include的地方展开。如果这个头文件被多个源文件包含,那么头文件中定义的东西也就在这些源文件中被重复定义多次。

    因此,全局变量应该定义在一个源文件中,其他源文件要使用的时候用extern声明即可。extern关键字声明一个变量,是告诉编译器有这个变量存在,但是他是在另一个模块中定义的。


    Damon Zheng
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 angel725 2013年1月21日 7:47
    2013年1月21日 7:00
    版主