【发布时间】:2014-07-20 17:55:41
【问题描述】:
由于某种原因,以下代码给出了错误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 作为我不知道的基类模板构造函数的参数?或者这是一个编译器错误?
我正在使用 C++11 在 Windows 7 上使用 MinGW 64bit 4.9.0 进行编译。
【问题讨论】:
-
你错过了
typename。 -
“一个错误”?哪一个?
-
@Igvidal:“错误:无法解析符号'TemplateBase'。”,它在代码片段的注释中。我现在也将它添加到正文中。
-
@ildjarn:将
替换为 时问题仍然存在。此外,在我的实际代码中,我使用了一个类。我已经编辑了问题的代码。 -
@Aberrant :不仅可能,而且是必需的! ;-D
标签: c++ templates inheritance c++11 const-iterator