C++模板:模板参数错误
问题描述:
template <typename ConcContainer>
class WebBrowsingPolicyData
{
public:
typedef ConcContainer<std::shared_ptr<WBRuleDetails>>::iterator iterator;
...
private:
ConcContainer<std::shared_ptr<WBRuleDetails>> usersData_;
CRITICAL_SECTION critSection
我在行得到一个编译错误(错误6错误C2238:意外的标记(S)之前 ';')
typedef ConcContainer<std::shared_ptr<WBRuleDetails>>::iterator iterator
哪有我在模板中做一个typedef?我必须失去了一些东西..
答
ConContainer本身就是一个模板,所以它需要一个模板,模板参数:
template <template <typename T> class ConcContainer>
class WebBrowsingPolicyData
{
public:
typedef typename ConcContainer<std::shared_ptr<WBRuleDetails>>::iterator iterator;
};
+0
我认为你是对的。 – Ghita
答
两种可能性:
- 编译器具有
>>
麻烦。插入一个空格。请注意,如果您使用的是C++ 11-conformant编译器,则这不应该成为问题。
例如:
typedef ConcContainer<std::shared_ptr<WBRuleDetails> >::iterator iterator;
-
ConcContainer
不具有构件或typedef的iterator
。检查以确保它确实如此。
编辑:这不是最令人烦恼的解析。
这看起来令人困惑:是'ConcContainer'类型名或模板? – aschepler
ConcContainer实际上是一个模板,这就是为什么hmjd答案是有效的 – Ghita