在VC ++ Dictionary中添加System :: String ^作为键

时间:2016-01-07 17:14:13

标签: dictionary c++-cli

我对C ++完全陌生,所以我坚持做一些我确定无足轻重的事情。

我有一本字典:

let arr = str.characters.split { $0 == "." }

我试图在字典中添加一个新房间:

Dictionary<String^, Room^>^ roomList = gcnew Dictionary<String^, Room^>();

房间定义如下:

Room r("Room 1", x, y);
roomList->Add(r.getName, %r);

当我尝试编译代码时,我收到以下错误:

  

&#39; Room :: getName&#39;:非标准语法;使用&#39;&amp;&#39;创建指向成员的指针&#34;

我做错了什么?出于某种原因,我无法使用对象的名称(System :: String ^)作为键,但我不确定原因。

1 个答案:

答案 0 :(得分:3)

   roomList->Add(r.getName, %r);

您将getName声明为函数,而不是属性。所以需要r.GetName(),注意添加的()括号。声明一个Name属性是明智的,它是.NET方式。

   Room r("Room 1", x, y);

此声明在技术上是错误的。您正在使用堆栈语义,当代码执行离开作用域块时,r对象将自动处理。您永远不想将已处置的对象添加到集合中。在这种情况下,您将逃避它,因为您实际上没有实现析构函数。如果你做的话,你会有祸了吗?你的代码的读者会感到沮丧。只要正确地做到这一点:

   Room^ r = gcnew Room("Room 1", x, y);
   roomList->Add(r=>getName(), r);

最后但并非最不重要的是,这看起来像是学生作业。你不能得到这个代码的及格分数,它不是C ++。您正在使用的语言称为C ++ / CLI,它是一种扩展语言,可帮助编写.NET程序的互操作代码。