我使用了一个函数来计算我在地图中初始化的某些指令的信息,比如
void get_objectcode(char*&token1,const int &y)
{
map<string,int> operations;
operations["ADD"] = 18;
operations["AND"] = 40;
operations["COMP"] = 28;
operations["DIV"] = 24;
operations["J"] = 0X3c;
operations["JEQ"] =30;
operations["JGT"] =34;
operations["JLT"] =38;
operations["JSUB"] =48;
operations["LDA"] =00;
operations["LDCH"] =50;
operations["LDL"] =55;
operations["LDX"] =04;
operations["MUL"] =20;
operations["OR"] =44;
operations["RD"] =0xd8;
operations["RSUB"] =0x4c;
operations["STA"] =0x0c;
operations["STCH"] =54;
operations["STL"] =14;
operations["STSW"] =0xe8;
operations["STX"] =10;
operations["SUB"] =0x1c;
operations["TD"] =0xe0;
operations["TIX"] =0x2c;
operations["WD"] =0xdc;
if ((operations.find("ADD")->first==token1)||(operations.find("AND")->first==token1)||(operations.find("COMP")->first==token1)
||(operations.find("DIV")->first==token1)||(operations.find("J")->first==token1)||(operations.find("JEQ")->first==token1)
||(operations.find("JGT")->first==token1)||(operations.find("JLT")->first==token1)||(operations.find("JSUB")->first==token1)
||(operations.find("LDA")->first==token1)||(operations.find("LDCH")->first==token1)||(operations.find("LDL")->first==token1)
||(operations.find("LDX")->first==token1)||(operations.find("MUL")->first==token1)||(operations.find("OR")->first==token1)
||(operations.find("RD")->first==token1)||(operations.find("RSUB")->first==token1)||(operations.find("STA")->first==token1)||(operations.find("STCH")->first==token1)||(operations.find("STCH")->first==token1)||(operations.find("STL")->first==token1)
||(operations.find("STSW")->first==token1)||(operations.find("STX")->first==token1)||(operations.find("SUB")->first==token1)
||(operations.find("TD")->first==token1)||(operations.find("TIX")->first==token1)||(operations.find("WD")->first==token1))
{
int y=operations.find(token1)->second;
//cout<<hex<<y<<endl;
}
return ;
}
如果我在函数中输入y给我一个答案就好了,这就是我需要的 但是有一个问题是从函数中返回值以便我可以在函数外部使用它,它给出了一个完全不同的答案,问题是什么
答案 0 :(得分:2)
函数中的第二个参数是常量引用。尝试更换 -
void get_objectcode(char*&token1,const int &y)
与
void get_objectcode(char*&token1,int &y)
并在if条件中,删除y的新声明并将其替换为 -
y=operations.find(token1)->second;
希望这有帮助!
答案 1 :(得分:1)
这可能更接近你想要的东西:
void get_objectcode(const char *token, int &y)
{
typedef std::map<std::string,int> OpMap;
OpMap operations;
operations["ADD" ] = 18;
operations["AND" ] = 40;
operations["COMP"] = 28;
operations["DIV" ] = 24;
// etc.
operations["SUB" ] = 0x1c;
operations["TD" ] = 0xe0;
operations["TIX" ] = 0x2c;
operations["WD" ] = 0xdc;
OpMap::iterator result = operations.find(token);
// note: assigns 0 to y if token is not found
y = (result == operations.end()) ? 0 : result->second;
//std::cout << std::hex << y << std::endl;
}
答案 2 :(得分:0)
答案 3 :(得分:0)
您的地图仅存在于该功能中。因此,元素仅存在于该函数中。如果在您调用函数的位置,您正在使用y
初始化引用,那么这将是对将不复存在的元素的引用。
每次调用函数时都不应该真正创建映射,至少最好只从函数中返回值:
std::map<std::string,int> operations;
operations["ADD"] = 18;
operations["AND"] = 40;
operations["COMP"] = 28;
operations["DIV"] = 24;
operations["J"] = 0X3c;
operations["JEQ"] = 30;
operations["JGT"] = 34;
operations["JLT"] = 38;
operations["JSUB"] = 48;
operations["LDA"] = 00;
operations["LDCH"] = 50;
operations["LDL"] = 55;
operations["LDX"] = 04;
operations["MUL"] = 20;
operations["OR"] = 44;
operations["RD"] = 0xd8;
operations["RSUB"] = 0x4c;
operations["STA"] = 0x0c;
operations["STCH"] = 54;
operations["STL"] = 14;
operations["STSW"] = 0xe8;
operations["STX"] = 10;
operations["SUB"] = 0x1c;
operations["TD"] = 0xe0;
operations["TIX"] = 0x2c;
operations["WD"] = 0xdc;
int get_objectcode(const std::string& key)
{
std::map<std::string, int>::iterator it = operations.find(key);
if (it == operations.end())
return -1;
else
return it->second;
}