Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在此作用域中声明SHGetKnownFolderPath 我已经学习java编程大约7个月了,我对C++有兴趣。我现在也在读一本C++的书。_C++_Winapi_Known Folders - Fatal编程技术网

未在此作用域中声明SHGetKnownFolderPath 我已经学习java编程大约7个月了,我对C++有兴趣。我现在也在读一本C++的书。

未在此作用域中声明SHGetKnownFolderPath 我已经学习java编程大约7个月了,我对C++有兴趣。我现在也在读一本C++的书。,c++,winapi,known-folders,C++,Winapi,Known Folders,我使用Eclipse C++,因为我对Eclipse非常熟悉。 我在C++中已经做了6个项目(小的),直到现在一切都很好。 我的问题是无法使SHGetKnownFolderPath方法工作。 整个生产线是红色的,尽管我已经导入了所有东西,构建了它,并尝试运行它。我在互联网上查过,我使用了和其他人相同的代码,但仍然不为我工作 它表示:无法解析函数SHGetKnownFolderPath 我使用的是64位windows 8计算机。 代码如下: 更新 #define WINVER 0x0600

我使用Eclipse C++,因为我对Eclipse非常熟悉。 我在C++中已经做了6个项目(小的),直到现在一切都很好。

我的问题是无法使SHGetKnownFolderPath方法工作。 整个生产线是红色的,尽管我已经导入了所有东西,构建了它,并尝试运行它。我在互联网上查过,我使用了和其他人相同的代码,但仍然不为我工作


它表示:无法解析函数SHGetKnownFolderPath

我使用的是64位windows 8计算机。 代码如下: 更新

    #define WINVER 0x0600 // 0x06020000  0x06030000
#include <shlobj.h>
#include <windows.h>
#include <combaseapi.h>
#include <comutil.h> //for _bstr_t (used in the string conversion)
#include <knownfolders.h>
#include <winerror.h> //for HRESULT
#include <winnt.h>
#include <iostream>
#include <string>






using namespace std;

int main(){

    LPWSTR wszPath = NULL;
    HRESULT hr;

    hr = SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &wszPath);// THIS LINE IS COMPLETELY RED

    if (SUCCEEDED(hr)){
    _bstr_t bstrPath(wszPath);
    std::string strPath((char*)bstrPath);
    std::cout << strPath;
    }

    CoTaskMemFree(wszPath);

return 0;
}
有一个小箭头指向&wszPath)下的最后一个括号

可能出了什么问题?
对于我能得到的所有答案或提示,我将不胜感激。

Eclipse没有错,它正在正确处理编译器的错误输出

编译器没有问题,它正确地抱怨试图在没有前面声明的情况下使用函数

清楚地告诉您从哪里获得该声明:

由于此功能需要Vista或更高版本,因此您还需要按照中的说明设置与特定Windows版本的兼容性

#define WINVER 0x0600
#include <windows.h>
#include <shlobj.h>

将UTF-16字符串强制转换为
char*
不会得到ASCII字符串。您可以使用理解UTF-16的
wcout
,也可以调用
WideCharToMultiByte
,以获取
cout
可以接受的ASCII字符串。

问题是您使用的是
WINVER
,而您应该使用
\u WIN32\u WINNT
WINVER
主要只影响非常旧的功能——您通常需要同时定义它们

#define WINVER 0x0600
#define _WIN32_WINNT 0x0600

我包括但不包括剧照error@Johan:您对WINVER的定义是什么?同一文档部分告诉您,此函数在Vista中开始可用,因此,如果您已配置与XP的兼容性,将找不到它。我没有定义WINVER,但我现在定义了,已生成项目,但仍然相同。是否必须在项目属性的库路径中添加某些内容?否,但您必须包含windows.h才能使用任何其他标题。您的windows版本定义是什么?也许,您正在尝试为比Vista更旧的版本构建应用程序?您的构建设置中是否有任何与WINVER或WINNT宏相关的内容?我刚刚添加了#define WINVER 0x0600。“它说:函数SHGetKnownFolderPath无法解析”,并且“'SHGetKnownFolderPath'未在此范围内声明”。这两条错误消息中哪一条是正确的?当我将鼠标放在SHGetKnownFolderPath上时,它表示无法解决此问题。当我将鼠标放在方法上的参数上时,它表示未在此范围内声明。但是错误消息指向&wszPath下的最后一个括号。日志显示Main.cpp:20:65:error:“SHGetKnownFolderPath”未在此文件中声明scope@jad我猜一个来自eclipse,另一个来自真正的编译器。两个都是正确的,只是措辞不同。好的,我现在收到了新的错误消息:17:09:21****项目测试配置调试的增量构建****信息:内部生成器用于构建g++-O0-g3-Wall-c-fmessage length=0-o“src\\HelloWorld.o”“..\\src\\HelloWorld.cpp“g++”-LC:\\Users\\Johan\\gcc\\x86\u 64-w64-mingw32”-o testing.exe“src\\HelloWorld.o”-lshell32.dll c:/users/johan/gcc/bin/。/lib/gcc/x86\u 64-w64-mingw32/4.9.1/。/../../../../../../x86\u 64-w64-mingw32/bin/ld.exe:找不到-lshell32.dll collect2.exe:错误:ld返回1退出状态17:09:25构建完成(耗时3.297ms),这是链接器错误。您可能只想使用
-lshell32
,但您必须查看您的库才能确定。是否必须在项目属性的库中包含某些内容你需要阅读IDE/编译器的一些基本文档。C++比java感觉更复杂。无论如何,谢谢你帮助我!
_bstr_t bstrPath(wszPath);
std::string strPath((char*)bstrPath);
#define WINVER 0x0600
#define _WIN32_WINNT 0x0600