C++ 如何转换地图<;int,string>;来自c++;11至c++;98?
我在C++11中有以下代码:C++ 如何转换地图<;int,string>;来自c++;11至c++;98?,c++,c++98,C++,C++98,我在C++11中有以下代码: #include <string> #include <map> using namespace std; map<int, string> finalStates = { { 0, "eroare lexicala" }, { 1, "identificator" } }; #包括 #包括 使用名称空间std; 最终状态图= { {0,“eroare lexicala”}, {1,“标识器”} }; 我
#include <string>
#include <map>
using namespace std;
map<int, string> finalStates =
{
{ 0, "eroare lexicala" },
{ 1, "identificator" }
};
#包括
#包括
使用名称空间std;
最终状态图=
{
{0,“eroare lexicala”},
{1,“标识器”}
};
我尝试将其转换为C++98,如下所示:
#include <string>
#include <map>
std::map<int, std::string> finalStates;
finalStates.insert( std::pair<int, std:string> (0, "eroare lexicala"));
finalStates.insert( std::pair<int, std:string> (1, "identificator"));
#包括
#包括
地图最终状态;
插入(std::pair(0,“eroare lexicala”);
最后状态。插入(标准::对(1,“标识器”);
这给了我一个错误“finalStates”没有命名类型|
请帮忙
错误“finalStates”未命名类型
在C++中,不能在外部(全局)范围内拥有语句。你必须把它们放在某种功能中。C++11代码没有语句,只有一个定义
C++98替代方案(如果映射应为const
,则特别有用):
#包括
#包括
标准::映射构造最终状态()
{
地图最终状态;
插入(std::pair(0,“eroare lexicala”);
最后状态。插入(标准::对(1,“标识器”);
返回最终状态;
}
标准::映射最终状态=构造最终状态();
错误“finalStates”未命名类型
在C++中,不能在外部(全局)范围内拥有语句。你必须把它们放在某种功能中。C++11代码没有语句,只有一个定义
C++98替代方案(如果映射应为const
,则特别有用):
#包括
#包括
标准::映射构造最终状态()
{
地图最终状态;
插入(std::pair(0,“eroare lexicala”);
最后状态。插入(标准::对(1,“标识器”);
返回最终状态;
}
标准::映射最终状态=构造最终状态();
在任何函数之外,您只能使用声明
例如,您可以声明一个辅助数组,如
const std::pair<int, std::string> a[] =
{
std::pair<int, std::string>( 0, "eroare lexicala" ),
std::pair<int, std::string>( 1, "identificator" )
};
const std::对a[]=
{
std::pair(0,“eroare lexicala”),
标准:对(1,“识别器”)
};
然后声明地图
std::map<int, std::string> finalStates( a, a + sizeof( a ) / sizeof( *a ) );
std::映射最终状态(a,a+sizeof(a)/sizeof(*a));
在任何函数之外,您只能使用声明
例如,您可以声明一个辅助数组,如
const std::pair<int, std::string> a[] =
{
std::pair<int, std::string>( 0, "eroare lexicala" ),
std::pair<int, std::string>( 1, "identificator" )
};
const std::对a[]=
{
std::pair(0,“eroare lexicala”),
标准:对(1,“识别器”)
};
然后声明地图
std::map<int, std::string> finalStates( a, a + sizeof( a ) / sizeof( *a ) );
std::映射最终状态(a,a+sizeof(a)/sizeof(*a));
其他人已经正确地涵盖了这一点。我想添加的唯一一件事是,如果您希望在全局对象构造时初始化贴图,您可能需要将初始化代码放入全局对象构造函数中:
#include <string>
#include <map>
std::map<int, std::string> finalStates;
class finalStates_init
{
public:
finalStates_init()
{
finalStates.insert( std::pair<int, std:string> (0, "eroare lexicala"));
finalStates.insert( std::pair<int, std:string> (1, "identificator"));
}
} the_finalStates_init;
#包括
#包括
地图最终状态;
类finalStates_init
{
公众:
最终状态_init()
{
插入(std::pair(0,“eroare lexicala”);
最后状态。插入(标准::对(1,“标识器”);
}
}最终状态初始;
这样,映射将在
main()
启动时具有其值。或者从map
派生一个类,并提供一个构造函数。其他人已经正确地介绍了它。我想添加的唯一一件事是,如果您希望在全局对象构造时初始化贴图,您可能需要将初始化代码放入全局对象构造函数中:
#include <string>
#include <map>
std::map<int, std::string> finalStates;
class finalStates_init
{
public:
finalStates_init()
{
finalStates.insert( std::pair<int, std:string> (0, "eroare lexicala"));
finalStates.insert( std::pair<int, std:string> (1, "identificator"));
}
} the_finalStates_init;
#包括
#包括
地图最终状态;
类finalStates_init
{
公众:
最终状态_init()
{
插入(std::pair(0,“eroare lexicala”);
最后状态。插入(标准::对(1,“标识器”);
}
}最终状态初始;
这样,映射将在
main()
启动时具有其值。或者从map
派生一个类,并提供一个构造函数。在map中插入内容的代码必须在函数内部。它不能处于声明级别。C++没有这样工作。<代码>给我的错误“最终状态”不命名类型< /C> >请发布确切的错误消息。您是否尝试调用函数finalStates.insert(在文件范围内,代码插入到一个函数中。代码不能在声明级别。C++不这样工作。<代码>给我的错误‘最终状态’不命名类型< /Cord>。请发布确切的错误消息。您是否尝试调用函数<代码> FialStase.S插入?(在文件范围内?我很难不键入<代码> Auto <代码>!这也是我首选的初始化此类映射的方法。人们也可以考虑将此函数静态化并将其放入匿名命名空间中,因此只调用当前模块内的内容。您可以简单地插入默认构造的字符串,使用<代码>运算符[]。
并分配给它,而不是键入对类型:finalStates[0]=“eroare lexicala”;finalStates[1]=“identificator”
。这足够便宜(而且比创建一个临时std::string
并复制它还要便宜)我很难不打字<代码> Audio/Cord>!这也是我首选的初始化这种映射的方法。人们也可以考虑把这个函数静态化,并把它放在一个匿名命名空间中,这样它只能在当前模块内部调用。并分配给它,而不是键入对类型:finalStates[0]=“eroare lexicala”;finalStates[1]=“identificator”
。这足够便宜(而且比创建一个临时std::string
并复制它还要便宜)。