【发布时间】:2020-04-07 18:54:48
【问题描述】:
我需要在 MSVC(C++98) 中构建我的代码。我用模板类参数声明了一个模板类。结果,我在 MSVC 编译期间遇到错误: 错误 C2977:“设置”:模板参数过多
Gcc 很好地构建了这段代码。
你可以自己试试: https://godbolt.org/z/YJXLX7
这是代码:
#include <iostream>
#include <vector>
class Iterator
{
public:
virtual int size() = 0;
};
template <template<typename> class TContainer, class TType>
class IteratorCollectionTest
: public Iterator
{
public:
virtual int size() { m_collection.size(); }
private:
TContainer<TType> m_collection;
};
template<typename TItem>
class Set
{
public:
Set();
Iterator* createIterator();
int size();
protected:
class SetInstance;
private:
SetInstance* m_instance;
};
template<typename TItem>
class Set<TItem>::SetInstance
{
public:
Iterator* createIterator() { return new IteratorCollectionTest<Set, TItem>(); }
int size() { return m_vec.size(); }
public:
std::vector<TItem> m_vec;
};
template<typename TItem>
Set<TItem>::Set()
: m_instance(new SetInstance())
{
}
template<typename TItem>
Iterator* Set<TItem>::createIterator()
{
return m_instance->createIterator();
}
template<typename TItem>
int Set<TItem>::size()
{
return m_instance->size();
}
int main()
{
Set<int> m_serr;
Iterator* iter = m_serr.createIterator();
}
我做错了什么? 有人可以帮帮我吗?
【问题讨论】:
标签: c++ templates visual-c++ compiler-errors c++98