C++ 错误:在'<';代币
我在linux上使用gcc4.4.1编译了以下代码:-C++ 错误:在'<';代币,c++,linux,C++,Linux,我在linux上使用gcc4.4.1编译了以下代码:- #include "glob.h" #include "netlist.h" #include "netlist_params.h" #include "netlist_abbrev.h" #include "lvs_util.h" #include "lvs_report.h" #include "lvs_data.h" #include "compare_opts.h" #include "flatten.h" #include &l
#include "glob.h"
#include "netlist.h"
#include "netlist_params.h"
#include "netlist_abbrev.h"
#include "lvs_util.h"
#include "lvs_report.h"
#include "lvs_data.h"
#include "compare_opts.h"
#include "flatten.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include "hash.h"
static THREAD_PRIVATE NlStringVec* ext_str_tab_v;
static THREAD_PRIVATE const char* ext_str_tab_s1;
static THREAD_PRIVATE const char* ext_str_tab_s2;
int Netlist::ExtStrHash::operator () (NlString i) const {
if (i.is_valid())
ext_str_tab_s1 = (*ext_str_tab_v)[i];
return Hash<const char*>::operator()(ext_str_tab_s1);
}
#包括“glob.h”
#包括“netlist.h”
#包括“网络列表参数”
#包括“网络列表”\u abbrev.h
#包括“lvs_util.h”
#包括“lvs_report.h”
#包括“lvs_data.h”
#包括“比较选项h”
#包括“展平.h”
#包括
#包括
#包括
#包括
#包括“hash.h”
静态线程\u私有NlStringVec*ext\u str\u tab\u v;
静态线程\u PRIVATE const char*ext\u str\u tab\u s1;
静态线程\u PRIVATE const char*ext\u str\u tab\u s2;
int Netlist::ExtStrHash::operator()(NlString i)const{
如果(i.is_valid())
外部结构表1=(*外部结构表v)[i];
返回Hash::operator()(ext_str_tab_s1);
}
错误:-
netlist_back_1.C: In member function 'int Netlist::ExtStrHash::operator()(NlString) const':
netlist_back_1.C:24: error: expected primary-expression before '<' token
netlist_back_1.C:24: error: expected primary-expression before 'const'
netlist_back_1.C:24: error: expected ';' before 'const'
netlist_back_1.C:24: error: expected unqualified-id before '>' token
netlist_back_1.C:24: error: expected initializer before '>' token
netlist\u back\u 1.C:在成员函数“int netlist::ExtStrHash::operator()(NlString)const”中:
netlist_back_1.C:24:错误:在“”标记之前应该有主表达式
netlist\u back\u 1.C:24:错误:在“>”标记之前应该有初始值设定项
hash.h文件中散列的定义:-
namespace Hash {
// template <class Key> struct Hash { };
#define DECL_SIMPLE_HASH(type) \
template <> \
struct Hash<type> { \
unsigned int operator() (type x) const { return x; } \
}
DECL_SIMPLE_HASH(signed char);
DECL_SIMPLE_HASH(unsigned char);
DECL_SIMPLE_HASH(signed short);
DECL_SIMPLE_HASH(unsigned short);
DECL_SIMPLE_HASH(signed int);
DECL_SIMPLE_HASH(unsigned int);
DECL_SIMPLE_HASH(signed long);
DECL_SIMPLE_HASH(unsigned long);
DECL_SIMPLE_HASH(signed long long);
DECL_SIMPLE_HASH(unsigned long long);
#undef DECL_SIMPLE_HASH
template <>
class Hash<const char*> {
static const int M = 61; // 5;
public:
unsigned int operator() (const char* s) const {
// case insensitive, so sensitivity can be turned on/off without
// effecting hash #.
unsigned h = 0;
char c;
while (c = *s++) {
if (c >= 'A' && c <= 'Z')
c = c - 'A' + 'a';
h = M*h + c;
}
return h;
}
};
template <> struct Hash<char*> : public Hash<const char*> {};
}
名称空间散列{
//模板结构哈希{};
#定义DECL\u简单\u散列(类型)\
模板\
结构哈希{\
无符号整数运算符()(类型x)常量{return x;}\
}
DECL_简单_散列(有符号字符);
DECL_简单_散列(无符号字符);
DECL_简单_散列(符号短);
DECL_简单_散列(无符号短);
DECL_简单_散列(有符号整数);
DECL_简单_散列(无符号整数);
DECL_简单_散列(长符号);
DECL_简单_散列(无符号长);
DECL_简单_散列(有符号长);
DECL_简单_散列(无符号长);
#未定义DECL\u简单\u散列
模板
类散列{
静态常数int M=61;//5;
公众:
无符号整数运算符()(const char*s)const{
//不区分大小写,因此可以在不区分大小写的情况下打开/关闭灵敏度
//影响散列#。
无符号h=0;
字符c;
而(c=*s++){
如果(c>='A'&&c有几个可能的选项:
- 您没有包括定义
哈希
模板的标题
- 模板
Hash
位于不同的命名空间中
哈希是命名空间。命名空间不能有模板参数
不要给类型和名称空间赋予相同的名称。据我所知:
- 您没有包括
“hash.h”
- 您已经注释掉了
散列
模板的声明,只留下了显式的专门化。您仍然需要声明模板,即使您没有定义通用版本
Hash
模板位于名称空间Hash
中,但您既不使用该名称空间,也不完全限定模板名称。(顺便说一下,对名称空间和类使用相同的名称不是一个好主意;它可能会导致歧义)
- 您试图调用一个非静态的
操作符()
,就好像它是静态的;您想要的东西更像return Hash()(ext\u str\u tab\u s1);
因此,Hash
没有被识别为模板名称也就不足为奇了(尽管必须说错误消息没有多大帮助)。WriteHash(ext\u str\u tab\u s1)
不会更容易吗?您是否包含定义哈希的内容?模板类哈希是否未包含和/或定义在命名空间中?如果是,这可能是您的问题。看起来编译器没有将哈希
识别为一种类型…它在哪里声明(在哪个命名空间中)我同意你们提出的问题肯定是一样的,但很难找到out@crazy_prog,这是一个很好的答案。而且,你需要退一步。这段代码是从哪里来的?它有很多问题。你自己写的吗?它的任何版本都有效吗?