我收到一条错误消息,指出没有命名类型,如下所示:
error: ‘hash_map’ does not name a type
typedef hash_map<const char*,LexUnitX*,MLexUnitFunctions> MLexUnit;
相关代码使用LexUnitX类型的结构创建自定义hash_map
类型,如下所示:
typedef struct {
int iLexUnit; // lexical unit unique identifier
const char *strLexUnit; // lexical unit as an array of characters (a word, a syllable, etc.)
VLexUnit vLexUnitPronunciations; // alternative pronunciations of the lexical unit
} LexUnitX;
VLexUnit向量的代码;向量LexUnit
- 类型指针
// lexical unit transcription
typedef struct {
int iLexUnit; // lexical unit id (unique correspondence id <> lexical unit in str format)
int iLexUnitPron; // lexical unit id (unique correspondence id <> lexical unit + pronunciation)
int iIndex; // index of the lexical unit within the lexicon file
vector<int> vPhones; // phonetic transciption
unsigned char iPronunciation; // pronunciation number
unsigned char iType; // standard / filler / sentence delimiter
float fProbability; // pronunciation probability (respect to alternative ones of the same lex unit)
float fInsertionPenalty; // penalty for inserting this lexical unit during decoding
} LexUnit;
class LexiconManager;
typedef vector<LexUnit*> VLexUnit;
最后用hash_map
类型将字符映射到相应的数据结构:
// maps lexical units as strings of characters to their corresponding data structure
#if defined __linux__ || defined __APPLE__ || __MINGW32__
typedef std::tr1::unordered_map<const char*,LexUnitX*,MLexUnitFunctions,MLexUnitFunctions> MLexUnit;
#elif _MSC_VER < 1700
typedef hash_map<const char*,LexUnitX*,MLexUnitFunctions> MLexUnit;
#else
#error "unsupported platform"
#endif
我不确定我在这里做错了什么,导致错误。
答案 0 :(得分:2)
好吧,如果您使用的标准库实现提供hash_map
(不是标准的一部分),则需要#include <hash_map>
并将其命名为std::hash_map
(它已放置根据{{3}},在MSVC和GNU的std
命名空间中。)
答案 1 :(得分:1)
如果您使用的是Visual Studio 2003(或更新版本),则应使用stdext命名空间。见https://msdn.microsoft.com/en-us/library/0d462wfh(v=vs.80).aspx:
在Visual C ++ .NET 2003中,
<hash_map>
和<hash_set>
的成员 头文件不再在std命名空间中,而是已经存在 移动到stdext命名空间。有关更多信息,请参阅stdext命名空间 信息。
_MSC_VER表(How to Detect if I'm Compiling Code With Visual Studio 2008?):
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003)
看起来你的代码错误地检查_MSC_VER