30
template <class Item>
class bag
{
public:
    //TYPEDEF
    typedef size_t size_type;
    typedef Item value_type;
...
}

当我使用

template<class Item>
bag<Item>::size_type bag<Item>::count(const Item& target) const

VC++ 报告错误为 Source.cpp(207): 警告 C4346: 'bag::size_type' : 依赖名称不是类型

谁能告诉我为什么?谢谢!

4

2 回答 2

46

它应该是

template<class Item>
typename bag<Item>::size_type bag<Item>::count(const Item& target) const
于 2013-04-21T13:52:47.077 回答
43

您需要在前面添加typenamebag<Item>::size_type因为它是依赖类型

typename bag<Item>::size_type bag<Item>::count(const Item& target) const

根据 C++11 标准:

14.6 名称解析

在模板声明或定义中使用并且依赖于模板参数的名称被假定为不命名类型,除非适用的名称查找找到类型名称或该名称由关键字限定typename

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

于 2013-04-21T13:52:54.750 回答