变量声明问题 我在cpp文件里调用我声明的变量,如我在BOOL DIBDWTStep(float** pixelData1,int nWidth,int nHeight,double *Ld,int m_nSupp,int scale)这个函数里调用filterlength这个变量,编译时出现错误,说这个变量没有声明 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /*double *ph; // 存放h参数 double *pg; // 存放g参数 double *tempRow; // 行变换用临时变量 double *tempCol; // 列变换用临时变量 double** pixelData2; double *mLd; int filterlength; int m_width,m_height;*/ 怎么都注释起来了 把注释去掉行吗 首先你这样的方式是不好的..不知道你是写的是什么类型的代码.感觉有点C的风格...如果要解决问题你可以在变量前面添加static修饰..你那样定义很容易产生LNK2005的错误 这个类不是我自己加的,我是拷贝了别人的这个类然后加到我的工程里,我再对这个类修改得到的我试过添加static,但问题还是没有解决,我是不是不能在这样的头文件里声明变量阿。如果不行我应该在哪声明呢,并且我要保证cpp文件中的所有函数都能用这个变量 用extern修饰,然后在cpp文件里定义他们 to ouyh12345我刚试了,还是不行呢 在每个cpp文件里都定义。其中一个cpp不加extern,其他的cpp都要加。 to tg15:我只在一个cpp文件里用啊?只是同一个cpp文件的多个函数里用,为什么还要在别的cpp文件里定义阿 如果只在一个cpp文件里用的话,那就直接把变量定义到这个cpp里行了..理论上来讲,定义全局变量放到头文件里是没问题的,但是,在找不到原因的情况下,可以试着改变一下,如果放到cpp里定义能编过,那就可能是文件的问题,也有可能是编译器的问题.如果放到CPP中也不能编过的话,再看下报错信息再作论断. 我把你的那个头文件变成下面这个样子(为了简化)// 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_FILEstatic 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;}根本就没有出错。估计不是全程变量有问题,应该是其它地方。 求助:windows下如何获取切换用户操作的消息 中磁碟机病毒什么症状啊!! 关于Release的问题? 高分求助:我有一个计算机系的朋友(内详) 列表框问题2:怎么选择一行? 关于MFC中的控件通知消息和命令消息 有没有这样的函数 有沈阳的朋友吗?能说说现在沈阳的工作情况吗? 关于重定向的新手问题 为什么对话框在加入背景图案,在指定区域重画是会闪烁? LNK2001: unresolved external symbol 关于LIST CTRL的问题·!
/*double *ph; // 存放h参数
double *pg; // 存放g参数
double *tempRow; // 行变换用临时变量
double *tempCol; // 列变换用临时变量
double** pixelData2;
double *mLd;
int filterlength;
int m_width,m_height;*/ 怎么都注释起来了 把注释去掉行吗
不知道你是写的是什么类型的代码.感觉有点C的风格...
如果要解决问题你可以在变量前面添加static修饰..
你那样定义很容易产生LNK2005的错误
我试过添加static,但问题还是没有解决,我是不是不能在这样的头文件里声明变量阿。如果不行我应该在哪声明呢,并且我要保证cpp文件中的所有函数都能用这个变量
我只在一个cpp文件里用啊?只是同一个cpp文件的多个函数里用,为什么还要在别的cpp文件里定义阿
理论上来讲,定义全局变量放到头文件里是没问题的,但是,在找不到原因的情况下,可以试着改变一下,如果放到cpp里定义能编过,那就可能是文件的问题,也有可能是编译器的问题.如果放到CPP中也不能编过的话,再看下报错信息再作论断.
// 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;
}根本就没有出错。
估计不是全程变量有问题,应该是其它地方。