首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能用const_iterator调用模板基类构造函数?

为什么我不能用const_iterator调用模板基类构造函数?
EN

Stack Overflow用户
提问于 2014-05-30 21:25:29
回答 1查看 527关注 0票数 4

由于某些原因,下面的代码给出了错误Symbol 'TemplateBase' could not be resolved.

代码语言:javascript
运行
复制
template <typename T>
class TemplateBase
{
    TemplateBase(std::map<std::string, T>::const_iterator anIterator)
    { }
};

class SubClass : public TemplateBase<int>
{
    SubClass(std::map<std::string, int>::const_iterator anIterator) :
        TemplateBase<int>(anIterator) //Error: Symbol 'TemplateBase' could not be resolved.
    { }
};

奇怪的是,删除::const_iterator时没有出现错误,只保留std::map<std::string, int>

代码语言:javascript
运行
复制
template <typename T>
class TemplateBase
{
    TemplateBase(std::map<std::string, T> aMap)
    { }
};

class SubClass : public TemplateBase<int>
{
    SubClass(std::map<std::string, int> aMap) :
        TemplateBase<int>(aMap) //No error.
    { }
};

此外,下面的函数也没有出现错误,因此它实际上似乎与模板基类调用与const_iterator的组合有关:

代码语言:javascript
运行
复制
void function()
{
    std::map<std::string, int>::const_iterator anIterator;
    TemplateBase<int> aTemplateBase(anIterator); //No error
}

是否有一些规则不允许使用const_iterator作为基类模板构造函数的参数,我不知道?或者这是一个编译器错误?

我正在使用MinGW 64位4.9.0在Windows7上编译,使用C++11。

EN

Stack Overflow用户

回答已采纳

发布于 2014-05-30 21:36:17

当使用依赖于模板类型的嵌套类型时,需要使用typename关键字:

代码语言:javascript
运行
复制
TemplateBase(typename std::map<std::string, T>::const_iterator anIterator)
{ }
票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23963634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档