我正在编写一个使用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()
{
}


另外,希望将它们分开...-不要-您正在浪费时间。使它们分开的唯一方法是在您还包括的不同标头中有一个定义。因此,从技术上讲,它们是分开的,但是实现仍然可见。

10-07 20:20