我正在使用rapidxml lib。 它定义了一个以这种方式解析文件的函数:
template<int Flags>
void parse(Ch *text)
lib提供const int
标志,例如:
const int parse_declaration_node = 0x20;
所以我在我的类中创建了一个指向静态int的指针:
const int * parser_mode;
在类构造函数中,我为它赋值:
parser_mode = &rapidxml::parse_declaration_node;
然后当我尝试将此const int *
用作解析函数的模板参数时:
tree->parse<parser_mode>(file->data());
我收到此错误消息:
错误:'GpxSectionData :: parser_mode'不能出现在 常数表达式
这句话的其余部分似乎正确,因为:
tree->parse<0>(file->data());
不会产生编译错误......
你可以告诉我这里缺少什么吗? 谢谢!感谢下面的解释,我可能会在课堂上定义它: 所以我认为这是:
class Myclass {
static const int parser_mode;
[...]
}
static const int Myclass::parser_mode = rapidxml::parse_declaration_node;
答案 0 :(得分:7)
template<int Flags> void parse(Ch *text)
... const int * parser_mode;
您的模板将int
作为模板参数,但您传递的是int*
。 int
和int*
类型不一样。
尝试tree->parse<rapidxml::parse_declaration_node>(file->data());
答案 1 :(得分:1)
您不能将变量用于模板参数的值。
相反,您可以将Flags模板参数添加到您的类
template<int Flags>
class CClass {
//...
};
并为类实例设置Flags参数
CClass<rapidxml::parse_declaration_node> obj;