在做串口通信时,上位机有两个对话框page1,page2;在page1中定义全局变量data[5],利用串口事件从单片机采集5个数据分别放到data[0]....data[4]中。在page2中想调用page1中的data[0]....data[4],该如何处理呢?我之前尝试通过extern的方法,出现如下问题:我在page2的源文件开头声明:extern int data[5];然后调用,编译时报错:error LNK2001: unresolved external symbol "int * data" (?data@@3PAHA)我还想过在page2中利用构造page1类对象的方法,但是只能调用data[]的在构造函数中的初始化值,不能调用单片机发送的值。
恳请各位帮忙想想解决方案,谢谢!串口

解决方案 »

  1.   

    把这个数据定义为page1的静态成员变量,page2通过page1:data来获取,别忘记加头文件了哦。
      

  2.   

    我试了下,还是报错:error LNK2001: unresolved external symbol "public: static int * CChuandiDlg::data" (?data@CChuandiDlg@@2PAHA)
    我在想是不是因为data[3]是数组中的某个元素,所以不能写page1::data[3],或许是其他原因。。
      

  3.   


    你申明为static变量后,需要给他初始化。比如:
    class CTestA
    {
    public:
    CTestA(void);
    ~CTestA(void);public:
    static int a;
    };int CTestA::a = 1;
      

  4.   

    我在类中定义
    public:
    static int data[5];
    在类外给数组的五个元素初始化:
    int CChuandiDlg::data[0]=0;
    int CChuandiDlg::data[1]=1;
    int CChuandiDlg::data[2]=2;
    int CChuandiDlg::data[3]=3;
    int CChuandiDlg::data[4]=4;
    报错如下:
    error C2466: cannot allocate an array of constant size 0
    error C2440: 'initializing' : cannot convert from 'const int' to 'int [5]'
    error C2369: 'public: static int * CChuandiDlg::data' : redefinition; different subscripts
    error C2369: 'public: static int * CChuandiDlg::data' : redefinition; different subscripts
    error C2369: 'public: static int * CChuandiDlg::data' : redefinition; different subscripts
    error C2369: 'public: static int * CChuandiDlg::data' : redefinition; different subscripts
      

  5.   

    int CChuandiDlg::data[] = {0, 1, 2, 3, 4}
      

  6.   

    extern int data[5]; 这样应该没错啊
      

  7.   

    定义全局变量data[5]
    关于extern的用法:
    在page1.h中如此 extern int data[5];
    在page1.cpp中如此 int data[5];
    在page2.h中如此 extern int data[5]; 或者#include "page1.h"