我正在编写一个使用std :: multimap作为成员的模板类,并得到编译错误。
LocTree.h:
#pragma once
#include <map>
template <class Loc, class T>
class LocTree
{
public :
typedef std::multimap<typename Loc, typename T> TreeType;
LocTree( void );
~LocTree( void ) { };
private :
TreeType db;
};
LocTree.cpp:
#include "StdAfx.h"
#include "LocTree.h"
LocTree< class Loc, class T>::LocTree()
{
}
编译错误(来自VC2005):
Error 1 error C2079: 'std::pair<_Ty1,_Ty2>::first' uses undefined class 'Loc' c:\program files (x86)\microsoft visual studio 8\vc\include\utility 53
Error 2 error C2079: 'std::pair<_Ty1,_Ty2>::second' uses undefined class 'T' c:\program files (x86)\microsoft visual studio 8\vc\include\utility 54
我知道我可以将函数定义放在.h中,但我希望将它们分开,如果这样做是合法的。如何解决这个(可能是新手)问题?
最佳答案
您的构造函数定义应为:
template<class Loc, class T>
LocTree<Loc,T>::LocTree()
{
}
另外,希望将它们分开...-不要-您正在浪费时间。使它们分开的唯一方法是在您还包括的不同标头中有一个定义。因此,从技术上讲,它们是分开的,但是实现仍然可见。