我在stdafx.h里定义了全局变量int num;
索性我在所有的.h和.cpp文件里都加入了外部变量声明extern int num;
可是编译时总提示这种错误:
Linking...
MyDoc.obj : error LNK2005: "unsigned int Num" (?Num@@3IA) already defined in ConfigDlg.obj
MyView.obj : error LNK2005: "unsigned int Num" (?Num@@3IA) already defined in ConfigDlg.obj
StdAfx.obj : error LNK2005: "unsigned int NumO" (?Num@@3IA) already defined in ConfigDlg.obj
Debug/My.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.实在不明白了,高手指教阿`~

解决方案 »

  1.   

    你非得这么干的话,那就这么声明:static int num;
      

  2.   

    你非得这么干的话,那就这么声明:extern int num;
      

  3.   

    #ifndef abcdefg
    #define abcdefgint num;;#endif
      

  4.   

    我在定义时用的int num;
    在其他文件下对这个外部变量声明时,用的extern int num;
    还是不解阿
    定义成static编译通过了。可是问什么呢?
      

  5.   

    没错,疏忽了stdafx.h:
    extern int num;然后在一个cpp里面int num就可以了错误因为stdafx.h被包了多次,但是楼主在stdafx.h内加了全局定义,于是定义重复了,除非只包一次stdafx.h
      

  6.   

    to striking:能不能解释一下,不明白你的意思啊,thx
      

  7.   

    static 定义是在各自包含stdafx.h的cpp文件内才有效的,它不是全局的了,和楼主本意有差别.
      

  8.   

    striking的意思在工程里是num只定义一次
      

  9.   

    这可就辛苦了,毕竟大多.h文件都是要被包含好几次的,那么在所有这些被包含的头文件里都不能定义全局变量了吗?
    我是不是该找出一个文件,没有被其他文件include 过呢/?
    总感觉怪怪的阿
      

  10.   

    楼主要干什么呢?如果是定义一个变量让工程里面其它的所有的cpp都不进行任何的改动能够调用此变量,那么声明一下extern int num就应该可以了.
        定义num部分放在自己的cpp里面.
      

  11.   

    MSDN3000说的很对,加了static 就不是全局变量了。