QT中 error: ‘CHAR’ was not declared in this scope,还有就是UpdateData();也出现错误

void QMultiBiometricsDlg::OnAdministorMenu()
{
//UpdateData();
long lVret;
char filename[32];
CHAR *szErr=new CHAR[128];
strcpy(filename,QString(m_NameValue));
if (m_ADMINISTRATOR_FLAG)//
{
//QMessageBox::about(NULL,"系统管理员,欢迎您!","您正在执行注册功能,数据库将被更改!");
//QMessageBox::warning(this,"administorMenu",tr("您正在执行注册功能,数据库将被更改!");
//label->setText("系统管理员,欢迎您!");
//return;
if(m_AVIALENROLLMENT_FLAG)
{
lVret=WritePersonalData(filename);//将个人模板数据写入指定文件
if (lVret != 0)
{
sprintf(szErr,"WritePersonalData exception");
MultiBiometricsDebug(lVret,"CMultiBiometricsDlg::WritePersonalData",szErr);
}
lVret=WriteIndexDB();//更改模板数据库的索引信息
if (lVret != 0)
{
sprintf(szErr,"WriteIndexDB exception");
MultiBiometricsDebug(lVret,"CMultiBiometricsDlg::WriteIndexDB",szErr);
}
}
}
else
{
if (!m_FACEFINISH_FLAG)
{
//QMessageBox::information(NULL,"提示","请先登陆!");
}
else
{
double dFaceMatchingScore=0.0;
double dMatchScore=0.0;
char administrator[32]="coolcat";//Administrator is coolcat
QByteArray *pFaceTemplate1=new QByteArray[MAX_FACETEMPLATE_HEIGHT*MAX_FACETEMPLATE_WIDTH];//更改
QByteArray *pFaceTemplate2=new QByteArray[MAX_FACETEMPLATE_HEIGHT*MAX_FACETEMPLATE_WIDTH];//更改
memcpy(pFaceTemplate1,pFaceTemplate,MAX_FACETEMPLATE_HEIGHT*MAX_FACETEMPLATE_WIDTH*sizeof(BYTE));
char filename[32];
strcpy(filename,administrator);
lVret=ReadPersonalData(filename);
if (lVret!=0)
{
//QMessageBox::warning(NULL,"注意:","读取管理员身份数据出错!");
}
else
{
memcpy(pFaceTemplate2,m_bFaceTemplate,MAX_FACETEMPLATE_HEIGHT*MAX_FACETEMPLATE_WIDTH*sizeof(BYTE));
lVret=d_CMatch.FaceTemplateMatch(pFaceTemplate1,pFaceTemplate2);//计算脸相的啮合度
dFaceMatchingScore=d_CMatch.m_dFaceMatchResult;
if (dFaceMatchingScore>PASSAUTHENTIFICATION)
{
m_ADMINISTRATOR_FLAG=true;
// QMessageBox::about(NULL,"Welcome!","欢迎您,系统管理员:");
}
// else QMessageBox::warning(NULL,"提示:","您必须得到授权才能进行这项操作, 请退出!");
}
delete [] pFaceTemplate1;
delete [] pFaceTemplate2;
}
}
delete [] szErr;
}
这个是MFC中转移到
QT的代码

Qt中没有默认的CHAR,你说你是从MFC转来的,那么在MFC里CHAR就是char,所以你把CHAR改成char吧。
你追问楼上的问题:error: cannot convert ‘QString’ to ‘const char*’ for argument ‘2’ to ‘char* strcpy(char*, const char*)’
上面这个错误是第7行 strcpy(filename,QString(m_NameValue));
strcpy是对char*操作的,你的第二个参数是QString啊,所以要改成
strcpy(filename,QString(m_NameValue).toLatin1());

其中QString(m_NameValue).toLatin1()的作用是:以参数 m_NameValue 构造QString对象,然后调用函数 QString::toLatin1() 将构造的对象转换为C风格字符串,也就是char *的类型,以符合strcpy函数。
QString 类似于C++的string 非常好用,你可以多看帮助文档。
建议你将QT写成Qt以免误解。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-11
CHAR没有声明,编译器不认识CHAR是啥意思,无法处理。追问

这个代码error: cannot convert ‘QString’ to ‘const char*’ for argument ‘2’ to ‘char* strcpy(char*, const char*)’应该怎么改呢?

追答

你要在代码开关处或代码包含的头文件中对CHAR进行声明。从代码看CHAR是一个类型,很可能是unsigned char的意思……