未在此范围内声明'SHGFP_TYPE_CURRENT'

时间:2014-04-25 07:16:13

标签: c++ qt include declaration

我正在将一个巨大的项目从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,我已经研究过,一切都是正确的 我试图找到其他人有同样的问题,但上下文不同或问题没有得到回答 三江源。

2 个答案:

答案 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>

或者另一种方法是直接使用值01作为SHGetFolderPath的参数。

答案 1 :(得分:0)

做更多的研究我找到了一个答案,用文字0替换SHGFP_TYPE_CURRENT,我做了它并编译了,但我不确定它是否会相同(我没有写过这个程序,我'我只是迁移它)。所以,如果有人能提供一些见解,那就太好了。

来源:http://webcache.googleusercontent.com/search?q=cache:http://www.dreamincode.net/forums/topic/200660-undeclared-variable/