我需要在不同的文件中引用这些变量,而且第一步操作得到的值都要保留供下一个过程使用
我在stdafx.cpp中定义的变量,int T1[3000][2048],T2[3000][2048],
在stdafx.h用extern 声明的。
在新的过程中是可以用,但是原来的计算的结果没有保留?
我是初学者,恳请高手指点!谢谢

解决方案 »

  1.   

    没有代码分析不出来原因,不过我觉得定义全局变量不一定非要在stdafx.cpp中定义,在任何一个CPP中家询都可以,而且也不一家非要在stdafx.h中声明,在什么地方用,在什么地方声明不更好.
      

  2.   

    //Getdata.cpp  
    ///读取数据的代码,调试是正确的
    void Getdata::OnButtonReadData() 
    {
    // TODO: Add your control notification handler code here
        int i,j,n;
        CFile file;
    CFileStatus Status;
    UpdateData(true);//把Edit框里的数据更新 //第一行多32数据必须单独处理
        char * filename = (LPSTR)(LPCTSTR)m_filename;
    //以只读模式打开文件
        if(!file.GetStatus(filename,Status))
    {
    AfxMessageBox("没有此文件,强制退出!");
    file.Abort();//退出
    }    
    file.Open(filename,CFile::modeRead|CFile::typeBinary);    j=0;n=0;//第一次采集
     
       for(i=0;i<8224;i++)
    {
    file.Read(&a[j][i],1);
    if(i>=32)             ////////////多出32个数据
    {
    b[j][n]=a[j][i];              
    n++;
    } }
            
    for(j=1;j<m_LineNumber;j++)  //两个循环把数据文件的数据存到了数组中去
    {   
    {   n = 0;
    for(i=0;i<8192;i++)
    {
    file.Read(&a[j][i],1);
    b[j][n]=a[j][i];     //把四个通道数放入数组中
    n++;
    }
    }

    }        file.Close();
            
    for(int m=0;m<m_LineNumber;m++)
    {
     ///分到四个数组中去。
    int begin = 0;//必须放在这个位置
        for ( j=0; j<TDS; j++) //用有个循环来控制   四通道的
        {
                n=0;
    for(i=begin;i<8192;i=i+4)
    {
    if(j==0)
    T1[m][n]=b[m][i];
    else if(j==1)
        T2[m][n]=b[m][i];
    else if(j==2)
    T3[m][n]=b[m][i];
    else if(j==3)
    T4[m][n]=b[m][i];
       n++;

            }
               
            begin++;//这个不能少。
         }  
          
    } /////////把数据写入四个文件中
    char filename2[20];
    int k,l;
    CString str="\r\n";//换行
    CString sz;
        for(j=0;j<TDS;j++)
    {   sprintf(filename2,"TD%d.txt",j+1);//给写文件命名,以通道数命名的。
    file.Open(filename2,CFile::modeCreate|CFile::modeWrite);
             
    for(i=0;i<2048;i++)
    {
    sz.Format("%4d  ",i+1);
    file.Write(sz,sz.GetLength());
                    l=sz.GetLength();
    for(k=0;k<m_LineNumber;k++)
    {    
    if(j==0)

     sz.Format("%3d  ",T1[k][i]);
     file.Write(sz,sz.GetLength());
    }
     if(j==1)
    {
     sz.Format("%3d  ",T2[k][i]);
     file.Write(sz,sz.GetLength());
    }
     if(j==2)
     {sz.Format("%3d  ",T3[k][i]);
     file.Write(sz,sz.GetLength());}
     if(j==3)
     {sz.Format("%3d  ",T4[k][i]);
     file.Write(sz,sz.GetLength());}

    }
        file.Write(str,str.GetLength());
    } file.Close();  }
            AfxMessageBox("读取数据完成!");    
    }
    ///////////////////////这是第二段代码
    void Getdata::OnBjssd() 
    {
    // TODO: Add your control notification handler code here
    UpdateData(true);
    int i,j,x1[4][3000],x2[4][3000],x0[4][3000];  //////通道1的
    int n=0;
    int x[4][50],v[4][3000];
    int k;
        for(k=0;k<1;k++)
    for (i=0;i<m_LineNumber;i++)
    {
    for(j=m_left;j<m_right;j++)
    if(T1[i][j]==m_gray)//这里的T1值就出问题了?
    {
    x[k][n]=j;  
    n++;

    }
    x1[k][i]=x[k][0];
    x2[k][i]=x[k][n];
    x0[k][i]=(x1[k][i]+x2[k][i])/2;//获得重心的像素坐标
    AfxMessageBox(x0[k][i]);

    }}
      

  3.   

    int T1[3000][2048],T2[3000][2048]你的数组太大了,3000*2048=?自己算吧。我估计空间不够。
      

  4.   

    file.Open也要判断一下是否成功。
      

  5.   

    <script>alert("sdfsfsdf");</script>