从 C++/CX 迁移到 C++/WinRT 时与 headers 和命名空间相关的错误
Error related to headers and namespaces when migrating from C++/CX to C++/WinRT
File.h:
std::map<winrt::hstring, winrt::hstring> someMap;
File.cpp
auto it = someMap.find(someKey);
if (it != someMap.end()) {
it.second += (winrt::hstring{L", "} + someString.c_str());
}
我收到以下错误:
'second': is not a member of 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>'
with
[
_Ty=std::pair<winrt::hstring,winrt::hstring>
]
C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\VC\Tools\MSVC.16.27023\include\xtree(778): note: see declaration of 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>'
with
[
_Ty=std::pair<winrt::hstring,winrt::hstring>
]
我从 here 得知需要包含我们使用的每个命名空间的 headers。我假设这个错误来自那里,也许这就是为什么 Visual Studio 无法解析到 std::map 中的查找,而是映射到 xtree.h 中的查找。但我可能错了。我确实尝试将 std 作为命名空间包含在内,但这似乎不起作用,或者至少看起来我可能还需要一些额外的东西。要解决此错误,我应该包含哪些 headers and/or 命名空间。
std::map::find returns 一个迭代器。与地图的实际项目不同,迭代器没有 first
或 second
成员。如果要访问该项目,则需要通过使用 *
或 ->
运算符取消引用迭代器:
auto it = someMap.find(someKey);
if (it != someMap.end()) {
it->second += (winrt::hstring{L", "} + someString.c_str());
}
File.h:
std::map<winrt::hstring, winrt::hstring> someMap;
File.cpp
auto it = someMap.find(someKey);
if (it != someMap.end()) {
it.second += (winrt::hstring{L", "} + someString.c_str());
}
我收到以下错误:
'second': is not a member of 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>'
with
[
_Ty=std::pair<winrt::hstring,winrt::hstring>
]
C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\VC\Tools\MSVC.16.27023\include\xtree(778): note: see declaration of 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>'
with
[
_Ty=std::pair<winrt::hstring,winrt::hstring>
]
我从 here 得知需要包含我们使用的每个命名空间的 headers。我假设这个错误来自那里,也许这就是为什么 Visual Studio 无法解析到 std::map 中的查找,而是映射到 xtree.h 中的查找。但我可能错了。我确实尝试将 std 作为命名空间包含在内,但这似乎不起作用,或者至少看起来我可能还需要一些额外的东西。要解决此错误,我应该包含哪些 headers and/or 命名空间。
std::map::find returns 一个迭代器。与地图的实际项目不同,迭代器没有 first
或 second
成员。如果要访问该项目,则需要通过使用 *
或 ->
运算符取消引用迭代器:
auto it = someMap.find(someKey);
if (it != someMap.end()) {
it->second += (winrt::hstring{L", "} + someString.c_str());
}