C++ STL地图<;字符串^,字符串^>;这张地图;为什么这样不行?

C++ STL地图<;字符串^,字符串^>;这张地图;为什么这样不行?,c++,map,stl,c++-cli,C++,Map,Stl,C++ Cli,我正在尝试编写一个简单的登录表单。我想在STL映射中存储登录帐户列表 从表单上的文本框检索文本值时。这些框返回“String^” 因此,我得到的是: map <String^, String^> NamePassList; typedef pair<String^, String^> StringPair; string line, usrName, password; usrName = password = ""; ifstream ifs("login.in")

我正在尝试编写一个简单的登录表单。我想在STL映射中存储登录帐户列表

从表单上的文本框检索文本值时。这些框返回“String^”

因此,我得到的是:

map <String^, String^> NamePassList;
typedef pair<String^, String^> StringPair; 

string line, usrName, password;
usrName = password = "";
ifstream ifs("login.in");
if (ifs.is_open()){
    while (!ifs.eof()){
        getline(ifs,line);
        bool endofusername = false;
        for (int i = 0; i < line.length(); i++){
            if (line[i] == ' '){
                endofusername = true;
            }
            if (!endofusername){
                usrName += line[i];
            }
            else{
                password += line[i];
            }
        }
        String ^ temp1 = gcnew String(usrName.c_str());
        String ^ temp2 = gcnew String(password.c_str());
        NamePassList.insert(StringPair(temp1, temp2));
    }
    ifs.close();
}

String ^ UserName = txtUserName->Text;
String ^ Password = txtPassword->Text;

map<String^, String^>::iterator nameItor;
nameItor = NamePassList.find(UserName);

if (nameItor->first == UserName){
    if (nameItor->second == Password){
        MessageBox::Show("Sucsess!", "log", MessageBoxButtons::OK);
    }
    else
        MessageBox::Show("Fail!", "log", MessageBoxButtons::OK);
}
else
{
    MessageBox::Show("Fail!", "log", MessageBoxButtons::OK);
}
map NamePassList;
typedef对StringPair;
字符串行、usrName、密码;
usrName=password=“”;
ifstream ifs(“login.in”);
if(if.is_open()){
而(!ifs.eof()){
getline(ifs,line);
布尔内融合名称=假;
对于(int i=0;iText;
字符串^Password=txtPassword->Text;
迭代器nameItor;
nameItor=NamePassList.find(用户名);
如果(nameItor->first==用户名){
如果(nameItor->second==密码){
MessageBox::Show(“Successs!”,“log”,MessageBox按钮::OK);
}
其他的
MessageBox::显示(“失败!”,“日志”,MessageBox按钮::确定);
}
其他的
{
MessageBox::显示(“失败!”,“日志”,MessageBox按钮::确定);
}
编译时,我从“map类”和实用程序中得到了一个错误

这是最好的方法,但我尝试的每件事都会给我一个新的错误


任何帮助都会很好!!谢谢大家。

为了可能减少一些错误,请尝试使用std::string简化代码

如果选择不使用托管字符串类型,我会选择std::String。由于您已经在使用std::string,请尝试使用该类型作为NamePassList。另外,在地图上键入def。然后,对于插入,使用值类型

typedef map<string, string> StringMap;
StringMap NamePassList;
以及搜索:

StringMap::iterator iter = NamePassList.find(UserName);
if (iter != NamePassList.end())
{
   ...found...
}

你不想“使用”iter,除非你通过对end()的测试知道它是有效的。

到底什么是
字符串^
@RyanHaining,一个C++/CLI或C++/CX句柄(或什么;我忘了)到字符串。你在使用
line
时没有检查以确保输入成功和
line
有效。@RyanHaining谢谢!这是一个更好的方式来看待它。
StringMap::iterator iter = NamePassList.find(UserName);
if (iter != NamePassList.end())
{
   ...found...
}