[英]Boost Multiindex: Example compiles in cpp files but not in header
我正在尝试编译boost Multiindex 示例
我有一个包含多个头文件和源文件的项目。 当我将以下代码放入某个源文件中时,它可以很好地工作,但是当我将此代码放入头文件中时,它将出现以下错误。 标头和cpp都包含必需的boost标头文件,否则boost可以正常工作。
我从未遇到过这样的问题,我很困惑,原因可能是什么。
// define a multiply indexed set with indices by id and name
typedef multi_index_container<
employee,
indexed_by<
// sort by employee::operator<
ordered_unique<identity<employee> >,
// sort by less<string> on name
ordered_non_unique<member<employee,std::string,&employee::name> >
>
> employee_set;
这里的员工是一个简单的结构。
void print_out_by_name(const employee_set& es)
{
// get a view to index #1 (name)
const employee_set::nth_index<1>::type& name_index=es.get<1>();
// use name_index as a regular std::set
}
在从属类型名称'employee_set :: nth_index'之前缺少'typename'const employee_set :: nth_index <1> :: type&name_index = es.get <1>();
预期的不合格ID const employee_set :: nth_index <1> :: type&name_index = es.get <1>();
尝试
const typename employee_set::nth_index<1>::type& name_index=es.get<1>();
nth_index <1> :: type是一种称为依赖类型的东西。 但是编译器不知道它是值的类型还是什么。 并写出typename告诉他,它确实是一种类型。
从C ++编译器的角度来看,代码是位于.hpp
还是.cpp
文件中并不重要:(通常)标头文件不是自己编译的,而是作为.cpp
一部分处理的它们包含在#include
文件。
因此,您的问题必须与在“标题”和“源”文件之间移动代码时无意中应用的某些更改有关。 看起来
void print_out_by_name(const employee_set& es);
不是模板函数或类模板的一部分,因此它不能处理依赖类型或任何可能需要插入typename
的事物。 也许这是更大的类的一部分,其中employee_set
实际上是模板参数?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.