【问题标题】:C# Dictionary to C++ std::mapC# 字典到 C++ std::map
【发布时间】:2018-06-19 22:00:12
【问题描述】:

我的 C# 文件 Rec.cs 中有一个 Dictionary 变量,定义为:

Dictionary<string, PrepDumpLoadItem> pPrepDumpLoadList 

这个pPrepDumpLoadList 充满了键和值,如下所示

foreach (XElement element in root.Elements())
                {
                    PrepDumpLoadItem item = new PrepDumpLoadItem();
                    item.Name = element.Name.ToString();

                    string isDumpMode = GetValueString(element, "Dump", "enabled");
                    if (isDumpMode == "1")
                    {
                        item.PrepDumpLoadMode += PrepDumpLoadModeType.DUMP;
                        item.HeaderFile = GetValueString(element, "Dump", "header");
                        item.DataFile = GetValueString(element, "Dump", "data");
                        //pPrepDumpLoadList.Add(item.Name, item);
                    }

                    string isLoadMode = GetValueString(element, "Load", "enabled");
                    if (isLoadMode == "1")
                    {
                        item.PrepDumpLoadMode += PrepDumpLoadModeType.LOAD;
                        item.HeaderFile = GetValueString(element, "Load", "header");
                        item.DataFile = GetValueString(element, "Load", "data");
                        //pPrepDumpLoadList.Add(item.Name, item);
                    }

                    pPrepDumpLoadList.Add(item.Name, item);
                }

在上面的代码之后,pPrepDumpLoadList 有 12 个条目,这意味着它的计数 == 12;

然后它传递给一个 C++ 文件 WrapperRec.cpp,其中的每个条目都应该被提取,并传递/复制到一个 C++ std::map 变量 PrepDumpLoadList。这被定义为

std::map<std::string, PrepDumpLoadItem> PrepDumpLoadList;

在SRecParameters.h中SRecParameters的结构中

这是PrepDumpLoadList 在调试模式下的样子(Visual Studio 2015):

看起来不错。 recon 作为参数传递,例如

void WrappedRecon::CreateImpl( ScanParameters scan,
                           ReconParameters recon,
                           ScannerParameters scanner,
                           MessageHandler^ msgHandler
                         )

我相信它是一个结构与SRecParameters 相同/相似的变量。

但是,我很难从 C# 中的 Dictionary 变量 PrepDumpLoadList 中提取条目。

我试过了

map<std::string, PrepDumpLoadItem>::iterator it = recon.PrepDumpLoadList.begin();

但红色摆动出现在recon 下方,并且编译错误提示error C2228: left of '.begin' must have class/struct/union

我真的对这里发生的事情感到困惑。我只是想像

for (int i = 0; i<recon.PrepDumpLoadList->Count; ++i) {

    CopyString(item.Name, recon.PrepDumpLoadList[i].Name, sizeof(item.Name));

    item.PrepDumpLoadMode = static_cast<DumpLoadModeType>(recon.PrepDumpLoadList[i].PrepDumpLoadMode);

    CopyString(item.HeaderFile, recon.PrepDumpLoadList[i].HeaderFile, sizeof(item.HeaderFile));
    CopyString(item.DataFile, recon.PrepDumpLoadList[i].DataFile, sizeof(item.DataFile));

    reconParams.PrepDumpLoadList.push_back(item);
}

从 Dictionary 变量中提取信息并将其推送回 std::map 变量。任何人都可以指出问题出在哪里以及如何解决?非常感谢。

【问题讨论】:

  • 我不认为recon 被定义为SRecParameters recon();minimal reproducible example 总是受欢迎的。
  • @chris 抱歉,我添加了一些解释。
  • 看起来PrepDumpLoadList 是一个指针。尝试使用 -&gt; 而不是 . 来访问它的成员,就像您在 for 循环行中所做的那样。虽然我们需要查看更多代码才能确定。
  • 我其实试过“->”,但是,它没有显示find(),或者begin()......而是只显示Count,....好像不是 std::map/Dictionary。

标签: c# c++ dictionary stl stdmap


【解决方案1】:

我在 C# 中创建了一个 List,然后处理(编组)这个 List 中的每个项目。并将它们放入 C++ std::map

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2019-10-06
    • 2022-01-13
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多