繁体   English   中英

Boost Multiindex:示例在cpp文件中编译,但不在标头中编译

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM