由于某些原因,下面的代码给出了错误Symbol 'TemplateBase' could not be resolved.
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>:
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的组合有关:
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。
发布于 2014-05-30 21:36:17
当使用依赖于模板类型的嵌套类型时,需要使用typename关键字:
TemplateBase(typename std::map<std::string, T>::const_iterator anIterator)
{ }https://stackoverflow.com/questions/23963634
复制相似问题