Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何转换地图<;int,string>;来自c++;11至c++;98?_C++_C++98 - Fatal编程技术网

C++ 如何转换地图<;int,string>;来自c++;11至c++;98?

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,“标识器”} }; 我

我在C++11中有以下代码:

#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
并复制它还要便宜)。