在 VC++ 字典中添加 System::String^ 作为键
Adding a System::String^ as key in VC++ Dictionary
我是 C++ 的新手,所以我被困在一些我确信是微不足道的事情上。
我有字典:
Dictionary<String^, Room^>^ roomList = gcnew Dictionary<String^, Room^>();
我正在尝试向字典中添加一个新房间:
Room r("Room 1", x, y);
roomList->Add(r.getName, %r);
房间定义如下:
ref class Room
{
private:
String^ mName;
double mX; //scaled X-coordinate of top left corner (meters)
double mY; //scaled Y-coordinate of top left corner (meters)
public:
Room(String^ name, double x, double y);
String ^ const getName() { return mName; }
double const getX() { return mX; }
double const getY() { return mY; }
};
当我尝试编译代码时出现以下错误:
'Room::getName': non-standard syntax; use '&' to create a pointer to member"
我做错了什么?出于某种原因,我不能使用对象的名称 (a System::String^) 作为键,但我不确定为什么。
roomList->Add(r.getName, %r);
您将 getName 声明为函数,而不是 属性。所以它需要是 r.GetName()
,注意添加的 () 括号。声明名称 属性 是明智的,这是 .NET 方式。
Room r("Room 1", x, y);
这个声明在技术上是错误的。您正在使用堆栈语义, r
对象将在代码执行离开范围块时自动处理。您永远不想将已处置的对象添加到集合中。在这种情况下,你会侥幸逃脱,因为你实际上并没有实现析构函数。如果你这样做,你会很不幸。不幸的是你的代码 reader 。只要做对了:
Room^ r = gcnew Room("Room 1", x, y);
roomList->Add(r=>getName(), r);
最后但同样重要的是,这看起来像是一项学生作业。您无法通过此代码获得及格分数,它不是 C++。您使用的语言称为 C++/CLI,它是一种扩展语言,有助于为 .NET 程序编写互操作代码。
我是 C++ 的新手,所以我被困在一些我确信是微不足道的事情上。
我有字典:
Dictionary<String^, Room^>^ roomList = gcnew Dictionary<String^, Room^>();
我正在尝试向字典中添加一个新房间:
Room r("Room 1", x, y);
roomList->Add(r.getName, %r);
房间定义如下:
ref class Room
{
private:
String^ mName;
double mX; //scaled X-coordinate of top left corner (meters)
double mY; //scaled Y-coordinate of top left corner (meters)
public:
Room(String^ name, double x, double y);
String ^ const getName() { return mName; }
double const getX() { return mX; }
double const getY() { return mY; }
};
当我尝试编译代码时出现以下错误:
'Room::getName': non-standard syntax; use '&' to create a pointer to member"
我做错了什么?出于某种原因,我不能使用对象的名称 (a System::String^) 作为键,但我不确定为什么。
roomList->Add(r.getName, %r);
您将 getName 声明为函数,而不是 属性。所以它需要是 r.GetName()
,注意添加的 () 括号。声明名称 属性 是明智的,这是 .NET 方式。
Room r("Room 1", x, y);
这个声明在技术上是错误的。您正在使用堆栈语义, r
对象将在代码执行离开范围块时自动处理。您永远不想将已处置的对象添加到集合中。在这种情况下,你会侥幸逃脱,因为你实际上并没有实现析构函数。如果你这样做,你会很不幸。不幸的是你的代码 reader 。只要做对了:
Room^ r = gcnew Room("Room 1", x, y);
roomList->Add(r=>getName(), r);
最后但同样重要的是,这看起来像是一项学生作业。您无法通过此代码获得及格分数,它不是 C++。您使用的语言称为 C++/CLI,它是一种扩展语言,有助于为 .NET 程序编写互操作代码。