我正在将一个巨大的项目从Qt 4.x迁移到5,(事实上我已经在这里多次寻求帮助,我不能更感谢你的帮助)。 我收到了下一个错误:
.. \ marssies \ userlayerswidget.cpp:在成员函数'void中 LayersModel :: importFromOld()': .. \ marssies \ userlayerswidget.cpp:1736:60:错误:'SHGFP_TYPE_CURRENT' 未在此范围内声明
它没有多大意义,因为我有正确的标题,所有包括:
#include "userlayerswidget.h"
#include "appcommon.h"
#include "messagebox.h"
#include "polyline.h"
#include "painterbar.h"
#include "rectangle.h"
#include "polygon.h"
#include "label.h"
#include "line.h"
#include "point.h"
#include "encsymbol.h"
#include "touchswibz.h"
#include "mapmodulelist.h"
#include "offlinelayersaver.h"
#include "circle.h"
#include <QMenu>
#include <QDir>
#include <QDesktopServices>
#include <QtDebug>
#ifdef _WIN32
#include <Shlobj.h>
#endif
以下是使用SHGFP_TYPE_CURRENT的代码:
void LayersModel::importFromOld() {
TCHAR appPath[MAX_PATH];
if (!(SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appPath))) {
//code
}
根据http://msdn.microsoft.com/en-us/library/bb762181%28VS.85%29.aspx,我已经研究过,一切都是正确的 我试图找到其他人有同样的问题,但上下文不同或问题没有得到回答 三江源。
答案 0 :(得分:4)
ShlObj.h
SHFGP_TYPE_CURRENT
定义如下:
#if (_WIN32_IE >= 0x0500)
typedef enum {
SHGFP_TYPE_CURRENT = 0,
SHGFP_TYPE_DEFAULT = 1,
} SHGFP_TYPE;
#endif
所以可以这样做:
#define _WIN32_IE 0x0500
#include <ShlObj.h>
或者另一种方法是直接使用值0
或1
作为SHGetFolderPath
的参数。
答案 1 :(得分:0)
做更多的研究我找到了一个答案,用文字0替换SHGFP_TYPE_CURRENT,我做了它并编译了,但我不确定它是否会相同(我没有写过这个程序,我'我只是迁移它)。所以,如果有人能提供一些见解,那就太好了。