我对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 ^)作为键,但我不确定原因。
答案 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程序的互操作代码。