我在用VC做一个单文档的工程proj。
包含mainfrm.cpp;proj.cpp;projDoc.cpp;projView.cpp等文件。
在工程中包含了一个定义全局变量的头文件:"globlevariable.h"
在上面这个头文件中定义了结构体,并声明了相应的全局变量:
///
.....struct g_sCtrldata
{
struct g_sCtrldata* pNext;
struct g_sCtrldata* head;
double x;
double y;
double dy;
double ddy;
}; //结构体定义
g_sCtrldata  * g_ContrldataHipA;//全局变量声明
.....
//
然后我在Mainfrm.cpp中include这个头文件,并且对全局变量* g_ContrldataHipA赋值。
Mainfrm.cpp:
///
#include "globlevariable.h"
g_ContrldataHipA=(g_sCtrldata*)malloc(sizeof(g_sCtrldata)*100);
.....
for (int i=0;i<100;i++)
{ (g_ContrldataHipA+i)->pNext=pI+1;
(g_ContrldataHipA+i)->x=*(g_dOutX+i);
(g_ContrldataHipA+i)->y=*(g_dOutY+i);
(g_ContrldataHipA+i)->dy=*(g_dOutDY+i);
(g_ContrldataHipA+i)->ddy=*(g_dOutDDY+i);
(g_ContrldataHipA+i)->head=g_ContrldataHipA;

}
...
以上都很顺利。
但是当我希望用曲线显示g_ContrldataHipA数组中的值时,需要在projView.cpp中访问并修改。这时问题出来了:
使用g_ContrldataHipA,编译时提示错误,g_ContrldataHipA没有定义。
我用extern g_ContrldataHipA也不行。
但是globlevariable.h中其他的非结构体的全局变量就可以直接使用,比如双精度变量,整型变量等等。后来想到在projView.cpp中加上#include "globlevariable.h"
但这时提示了几百个错误,因为"globlevariable.h"已经在main.obj中定义了。:error LNK2005: "struct g_sCtrldata * g_Contrldata" (?g_Contrldata@@3PAUg_sCtrldata@@A) already defined in MainFrm.obj请高手来抱我解决一下这个问题,难道结构体在不同的类中作为全局变量传递不可以吗?

解决方案 »

  1.   

    globlevariable.h改为:
    struct g_sCtrldata
    {
    struct g_sCtrldata* pNext;
    struct g_sCtrldata* head;
    double x;
    double y;
    double dy;
    double ddy;
    }; //结构体定义
    extern bg_sCtrldata  * g_ContrldataHipA;//全局变量声明然后在projView.cpp中加上#include "globlevariable.h"
      

  2.   

    extern g_sCtrldata  * g_ContrldataHipA;//全局变量声明
      

  3.   

    在 g_sCtrldata  * g_ContrldataHipA; 之前添加个 struct , 即
    struct g_sCtrldata  * g_ContrldataHipA;然后在别的文件中用的时候要:
    extern struct g_sCtrldata  * g_ContrldataHipA;或者你用 typedef 对结构体重定义一下.
      

  4.   

    在.h文件中定义结构,在相应的.cpp文件中用该结构定义变量;然后在用到该变量的地方#include .h 并用extern struct定义外部变量即可。在StdAfx.h中:
    struct g_sCtrldata
    {
    struct g_sCtrldata* pNext;
    struct g_sCtrldata* head;
    double x;
    double y;
    double dy;
    double ddy;
    }; //结构体定义
    在StdAfx.cpp中
    struct bg_sCtrldata  * g_ContrldataHipA;//全局变量声明在要用到的.cpp文件中
    #include "StdAfx.h"
    extern struct bg_sCtrldata  * g_ContrldataHipA; 
      

  5.   

    感谢各位大虾的捧场与帮助,分不多,分不过来。。
    另外问一下楼上,:
    在StdAfx.cpp中  
    struct  bg_sCtrldata    *  g_ContrldataHipA;//全局变量声明  
    为什么会出现“bg_sCtrldata”?前面.h里定义的结构名称是“g_sCtrldata”阿,那个“b”是怎么来的??
      

  6.   

    是你问题中多打了一个b 我没注意直接拷上去了 应该是g_sCtrldata 呵呵