有一些全局变量,我统一放在了以个头文件中,但是编译的时候,其他的入enum之类,都没有问题,但是其中的一个数组,老说我重复定义,怎么回事呢?
代码结构如下://定义的全局变量,GlobalFile.h
#ifndef GLOBALFILE_H
#define GLOBALFILE_H
enum eListFlag
{
list_none = -1,
list_name = 100,
list_mobile,
list_corp,
list_sex,
list_invalid,
list_effect,
list_phonext,
list_level,
list_record
};//就是这个说我重复定义
eListFlag gColumnList[9] = {
list_none,
list_none,
list_none,
list_none,
list_none,
list_none,
list_none,
list_none,
list_none
};
#endif//引用1,DataCheck.h
#ifndef GLOBALFILE_H
#incluce "GlobalFile.h"
#endif
//.....其他代码
//引用2,ViewSetting.h
#ifndef GLOBALFILE_H
#incluce "GlobalFile.h"
#endif
//.....其他代码
结果就是,说我那个数组重复定义,如果我把数组定义给去掉,就好了,这是为什么呢?

解决方案 »

  1.   

    我改成了int gColumnList[9]={0};仍旧报同样的错ViewSetting.obj : error LNK2005: "int * gColumnList" (?gColumnList@@3PAHA) already defined in testView.obj
      

  2.   

    //引用1,DataCheck.h
    #ifndef GLOBALFILE_H
    #incluce "GlobalFile.h"
    #endif
    //.....其他代码
    //引用2,ViewSetting.h
    #ifndef GLOBALFILE_H
    #incluce "GlobalFile.h"
    #endif
    //.....其他代码
    怎么发现是incluce而不是include啊???
      

  3.   

    哦,那int   *   gColumnList,你在什么地方定义了??
      

  4.   

    没在别的地方定义啊,就是那个数组吧我猜,我吧名字改成int gColumnListaaaaaaaa[9]={0},错误也会随之改变的
      

  5.   

    //引用1,DataCheck.h 
    #ifndef   GLOBALFILE_H 
    #include   "GlobalFile.h" 
    #endif 
    //.....其他代码 
    //引用2,ViewSetting.h 
    #ifndef   GLOBALFILE_H 
    #include   "GlobalFile.h" 
    #endif 
    //.....其他代码
     那应该是编译器编译的时候,由于单个文件中#ifndef   GLOBALFILE_H都没有定义,所以#include   "GlobalFile.h"被包含了两次,最终导致了eListFlag gColumnList[9] 被重复定义了一次出错~~~
      

  6.   

    谢谢热心的 snowbirdfly有没有办法产看宏有没有定义的?要如何改呢?
    还有个疑问,如果是那样,那那些enum应该也算是重复定义啊??
      

  7.   

    加extern申明看看,这种错误不是数组变量定义的问题,你这个类型的错误在VC中很普遍的,baidu一下,很多。
      

  8.   

    恩,可以用楼上方法,声明为外部变量就行了~~~
    有没有办法产看宏有没有定义的?
    可以直接右键,go to defination~~~
      

  9.   

    你看采用#pragma once只让头文件只编译一次试试看~~~
      

  10.   


    #ifndef GLOBALFILE_H
    #define GLOBALFILE_H
    #pragma   once
    enum eListFlag
    {
    list_none = -1,
    list_name = 100,
    list_mobile,
    list_corp,
    list_sex,
    list_invalid,
    list_effect,
    list_phonext,
    list_level,
    list_record
    };extern int gColumnList[9] = {0};
    谢谢几位,现在我改成这样子了,可是还是同样的错误啊?
    我也想baidu,不过部知道用什么关键字找好,没找到什么有用的信息
      

  11.   

    第一种方案:int gColumnList[9] = {...}; 放到CPP文件里定义,然后在头文件里使用extern int gColumnList[9];。第二种方案:在头文件里可以这样定义:__declspec(selectany) int gColumnList[9] = {...};