这是编译器错误吗?难道我做错了什么?

2023-12-01

我正在尝试制作一个简单的地图来查找一些数据,但结果非常奇怪:

#include "stdafx.h"
#include "atlstr.h"
#include <map>

enum InputTypes { Manual, Automatic, Assisted, Imported, Offline };

struct Params
{
    int inputType;
    const char* moduleName;
    DWORD flag;
};

int _tmain()
{
    std::map<CString, Params> options {
        { "Add",       { Manual,    "RecordLib",  0 } },
        { "Open",      { Assisted,  "ViewLib",    1 } },
        { "Close",     { Imported,  "EditLib",    2 } },
        { "Inventory", { Automatic, "ControlLib", 3 } },
        { "Report",    { Offline,   "ReportLib",  4 } }
    };

    for (std::map<CString, Params>::iterator iter = options.begin(); iter != options.end(); ++iter)
    {
        printf("Entry: %s ==> { %d, %s, %d }\n", (const char*)(iter->first),
            iter->second.inputType, iter->second.moduleName, iter->second.flag);
    }


    return 0;
}

Output:

Entry: îþîþîþîþîþîþîþîþîþîþîþîþ[â0; t ==> { 0, RecordLib, 0 }
Entry: Close ==> { 3, EditLib, 2 }
Entry: Inventory ==> { 1, ControlLib, 3 }
Entry: îþîþîþîþîþîþîþîþîþîþîþîþCâ0# t ==> { 2, ViewLib, 1 }
Entry: Report ==> { 4, ReportLib, 4 }

正如您所看到的,一些 CString 值变成了垃圾。 但我看不出有什么理由不能以这种方式创建地图。

这是 Microsoft Visual Studio 2013 编译器中的错误吗?
我的代码有什么特别之处吗?

############ 编辑 ##############

对于那些认为这是一个问题的人CString,我重写了它std::string,并且输出更差:

#include "stdafx.h"
#include "atlstr.h"
#include <map>

enum InputTypes { Manual, Automatic, Assisted, Imported, Offline };

struct Params
{
    int inputType;
    std::string moduleName;
    DWORD flag;
};

int _tmain(int argc, _TCHAR* argv[])
{
    std::map<std::string, Params> options{
        { "Add",       { Manual, "RecordLib", 0 } },
        { "Open",      { Assisted, "ViewLib", 1 } },
        { "Close",     { Imported, "EditLib", 2 } },
        { "Inventory", { Automatic, "ControlLib", 3 } },
        { "Report",    { Offline, "ReportLib", 4 } }
    };

    for (std::map<std::string, Params>::iterator iter = options.begin(); iter != options.end(); ++iter)
    {
        printf("Entry: %s ==> { %d, %s, %d }\n", iter->first.c_str(),
            iter->second.inputType, iter->second.moduleName.c_str(), iter->second.flag);
    }
    return 0;
}

Output

Entry:  ==> { 0, , 0 }
Entry: Report ==> { 4, , 4 }

请注意,这确实适用于IDEOne


我已将您的示例复制到 MSVC 中。它甚至不仅仅是不正确的打印 - 它是在破坏映射时 ATL CString 中的内存违规。但所有这些都适用于 std::string。结论 - 有缺陷的 ATL 实现。如果我大胆猜测,我会说,这是移动构造函数中的一个错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这是编译器错误吗?难道我做错了什么? 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob

随机推荐

  • 脚本可以在本地主机上运行,​​但不能在服务器上运行

    我遇到这个问题 代码在本地主机上运行 但当我将其上传到服务器时却不起作用 我想实现这个 宝丽莱照片吧画廊 这是我的网站的链接 十二生肖 2013 Note 您需要进入图库选项卡才能查看它 EDIT 请使用 Google Chrome 浏览器
  • 寻找正则表达式来匹配 gmail plus 地址

    我目前使用这个 gmail com 我正在捕获一组加号之前和之后的文本 它适用于大多数情况 例如 email protected 但如果我尝试匹配说就会跌倒 email protected 重复的 号似乎把它搞砸了 任何帮助将非常感激 Th
  • 将 R Parallel 与其他 R 包一起使用

    我正在使用 R 中的 LQMM 包进行非常耗时的分析 我将模型设置为从星期四开始运行 现在是星期一 并且仍在运行 我对模型本身充满信心 作为标准 MLM 进行测试 并且对我的 LQMM 代码充满信心 已经使用相同的数据集运行了其他几个非常相
  • 检测用户存在

    我想做的是检测用户是否正在积极使用运行 Windows 2000 或更高版本 的计算机 最好 我想在不使用屏幕保护程序的情况下执行此操作 背景 我们有一个客户服务部门 位于寻线组中 可以 可用 或 不可用 如果他们 有空 呼叫将被路由到他们
  • 多个命令在 xcode 11.4 反应本机中产生错误我的副本包资源为空

    以下是xcode中的错误 我还尝试过从工作区设置构建旧版本 但未能成功 多个命令生成 Users saifubaid Library Developer Xcode DerivedData antispam bjwrxskogxnnophf
  • 如何在Linux内核中递归读取目录内容?

    我想实现一个树遍历函数 打印给定目录的所有内容 在内核中 我知道如何在用户空间中执行此操作 但我的要求是在内核空间中执行此操作 为此 我正在研究 vfs readdir 函数 并且对其用法有点困惑 假设我将从其他内核模块调用我的遍历函数 这
  • 如何设置 AlertDialog 的主题

    如何将警报主题设置为标准 Android 主题之一 我想使用 Holo Dark 因为弹出窗口默认为 Holo Light 我的代码 AlertDialog Builder confirm new AlertDialog Builder t
  • 如何使用 NSCache

    有人可以举例说明如何使用NSCache缓存字符串 或者有人有一个很好的解释的链接吗 我好像找不到啊 您使用它的方式与使用它的方式相同NSMutableDictionary 不同的是 当NSCache检测到内存压力过大 即缓存了太多值 它将释
  • PyCharm 中注释的折叠

    很长一段时间我一直在寻找一种在 PyCharm 中折叠注释的方法 基本上我一直在寻找一种方法来实现相同的目标 对于代码块的注释 很容易实现这一点 region Description all your comments go here en
  • 如何使用 javascript 更改 @keyframes 值?

    我想要做的是改变 0 和 100 的最高值 keyframes取决于 javascript 中的 x 等于什么 我之前已经使用 javascript 更改了 css 但我被困在这个上了 Code var x Math floor Math
  • 如何使用 Amazon Cognito 进行未经身份验证的访问?

    我创建了联合身份 Enabled 未经身份验证的访问与复选框 创建了与此身份关联的角色并赋予它管理员访问权限 所以它应该拥有所有权限 然后我添加此代码以将文件上传到 AWS S3 它与访问 密钥一起使用 我不想公开给 UI 但它不适用于 C
  • JHipster 应用程序中延迟加载组件的 i18n

    My App是基于JHipster因此语言服务是通过以下方式提供的智语言服务 in the ng jhipster库使用了一个Jhi配置服务配置ngx translate无需我在我的中导入和配置 TranslateModuleapp mod
  • MSI 卸载期间文件到底是如何删除的?

    我想知道在卸载过程中已安装的文件 组件到底发生了什么 对于安装和升级过程 MSDN 上有可靠的文档 请参阅文件版本控制规则 and 默认文件版本控制 例如 无论如何 我在 MSDN 或 WiX 的文档中找不到卸载删除逻辑的文档 所以 我的问
  • 批量递归文件夹并填充数组

    我希望通过文件夹 子文件夹 等进行递归 使用文件夹路径动态填充数组 示例 我有一个名为 A 的文件夹 其中有 2 个子文件夹 B 和 C C 有一个子文件夹 D 所以数组将是 Folder 01 A Folder 02 A B Folder
  • 以编程方式禁用 UITextView 的水平滚动

    我正在寻找一种以编程方式禁用 UITextView 水平滚动的方法 通过 Interface Builder 很容易 但由于我以编程方式设计视图 所以我找不到方法来做到这一点 我用谷歌搜索它作为好吧 但我得到的最多的是 如何以编程方式停止水
  • 检测运营商连接类型(3G / EDGE / GPRS)

    如何获取运营商网络的连接类型 我可以使用以下命令了解连接是 WIFI 还是 WWANReachability class 我能够获取网络标志 可达性标志状态 WR t localWiFiStatusForFlags 我可以使用以下方式获取
  • Bower 安装错误:无法连接并退出代码 #128

    我在凉亭安装方面遇到问题 Bower ECMDERR 无法执行 git ls remote tags heads HTTPS LINK 到 Bower Angular Mocks git 退出代码 128 我遵循了中提到的建议Git Bow
  • 可以使用 关闭跨度吗?

    span class drop span HTML span 可以这样关闭吗 这是否有效取决于您doctype 基本上无论您使用的是 XHTML 还是 HTML 使用 XHTML 时 所有主要浏览器都将支持自关闭标签 如您提供的示例 采取以
  • 如何修改 Xamarin.Forms 中的 WebView 以在设备上的浏览器中打开链接?

    默认链接
  • 这是编译器错误吗?难道我做错了什么?

    我正在尝试制作一个简单的地图来查找一些数据 但结果非常奇怪 include stdafx h include atlstr h include