我在cpp文件里调用我声明的变量,如我在BOOL DIBDWTStep(float** pixelData1,int nWidth,int nHeight,double *Ld,int m_nSupp,int scale)这个函数里调用filterlength这个变量,编译时出现错误,说这个变量没有声明

解决方案 »

  1.   


    /*double *ph;             // 存放h参数  
     double *pg;             // 存放g参数 
     double *tempRow;        // 行变换用临时变量 
     double *tempCol;        // 列变换用临时变量 
    double** pixelData2; 
    double *mLd; 
     int filterlength; 
    int m_width,m_height;*/ 怎么都注释起来了 把注释去掉行吗
      

  2.   

    首先你这样的方式是不好的..
    不知道你是写的是什么类型的代码.感觉有点C的风格...
    如果要解决问题你可以在变量前面添加static修饰..
    你那样定义很容易产生LNK2005的错误
      

  3.   

    这个类不是我自己加的,我是拷贝了别人的这个类然后加到我的工程里,我再对这个类修改得到的
    我试过添加static,但问题还是没有解决,我是不是不能在这样的头文件里声明变量阿。如果不行我应该在哪声明呢,并且我要保证cpp文件中的所有函数都能用这个变量
      

  4.   

    用extern修饰,然后在cpp文件里定义他们
      

  5.   

    to ouyh12345我刚试了,还是不行呢
      

  6.   

    在每个cpp文件里都定义。其中一个cpp不加extern,其他的cpp都要加。
      

  7.   

    to tg15:
    我只在一个cpp文件里用啊?只是同一个cpp文件的多个函数里用,为什么还要在别的cpp文件里定义阿
      

  8.   

    如果只在一个cpp文件里用的话,那就直接把变量定义到这个cpp里行了..
    理论上来讲,定义全局变量放到头文件里是没问题的,但是,在找不到原因的情况下,可以试着改变一下,如果放到cpp里定义能编过,那就可能是文件的问题,也有可能是编译器的问题.如果放到CPP中也不能编过的话,再看下报错信息再作论断.
      

  9.   

    我把你的那个头文件变成下面这个样子(为了简化)
    // FreTrans.h #ifndef _INC_FreTransAPI 
    #define _INC_FreTransAPI //#include  <complex> 
    //using namespace std; 
     double *ph;             // 存放h参数  
     double *pg;             // 存放g参数 
     double *tempRow;        // 行变换用临时变量 
     double *tempCol;        // 列变换用临时变量 
    double** pixelData2; 
    double *mLd; 
     int filterlength; 
    int m_width,m_height;
    // 函数原型
    // double mm_width; 
    #endif //!_INC_FreTransAPI在testDlg.cpp中声明如下:
    #include "stdafx.h"
    #include "test.h"
    #include "testDlg.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CTestDlg dialog
    #include "FreTrans.h"CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CTestDlg::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CTestDlg)
    // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
    。。在testDlg.cpp中做如下调用:
    void CTestDlg::aaa(CString str)
    {
    //char* p = str.GetBuffer(5);
    *ph=14;
    }根本就没有出错。
    估计不是全程变量有问题,应该是其它地方。