0

可能重复:
我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?

我正在使用 Visual Studio 2012 编译 Palabos。我收到以下错误:

警告 1 警告 C4346: 'plb::ExtractDynamicsChainFunctional2D::DMap' : 从属名称不是类型 c:\users\max\desktop\drawing\c++\palabos\src\dataprocessors\metastufffunctional2d.hh 100 1 绘图

错误 2 错误 C2061:语法错误:标识符 'DMap' c:\users\max\desktop\drawing\c++\palabos\src\dataprocessors\metastufffunctional2d.hh 100 1 绘图

导致此错误的代码是:

/* ******** ExtractDynamicsChainFunctional2D ************************************ */
template<typename T, template<typename U> class Descriptor>
ExtractDynamicsChainFunctional2D<T,Descriptor>::ExtractDynamicsChainFunctional2D (
        ExtractDynamicsChainFunctional2D<T,Descriptor>::DMap const& dynamicsMap_,
        pluint maxChainSize_ )
    : dynamicsMap(dynamicsMap_),
      maxChainSize(maxChainSize_)
{ }

我对 C++ 的了解非常有限。有人可以解释导致此错误的原因,以及我如何解决它。

4

1 回答 1

3

错误意味着:ExtractDynamicsChainFunctional2D<T,Descriptor>::DMap默认情况下不是类型,不能这样使用。如果你想让它被识别为一种类型,你必须放在typename它前面。

该问题仅发生在模板代码内部,您希望在其中访问另一个模板的成员类型。

于 2012-11-26T09:01:52.897 回答