2013-04-15 45 views
0

我正在尝试创建一个类Info<P,S>,该类包含指向另一个类型为Info<S,P>的对象的指针。我有以下代码。C++模板类自引用

template <class P, class S> 
class Info { 
…. 
public: 
Info(…, Info<S,P>* parentInfo) : …, parentInfo(parentInfo) 
{} 
… 
private: 
Info<S, P> *parentInfo; 
}; 

…. 

typedef Info<ActualP, ActualS> OneInfo; 
typedef Info<ActualS, ActualP> OtherInfo; 
… 
OtherInfo* parentInfo =…; 
OneInfo info(…, parentInfo); 

这不是编译,并说构造函数不是一个有效的(在调用)。

我想这会导致尝试解决无限递归。我对吗?从Info<P,S>开始引用Info<S,P>的目的是什么?

+3

什么是确切的错误? –

+0

把它放在另一个函数而不是构造函数中。 – atoMerz

+0

@ user1412084请将完整的错误信息(包括“候选人”部分)放入原始文章中。 – scones

回答

1

使用typename指依赖模板参数的类型:

template <class T> 
class Info 
{ 
    public: 
    Info() : parentInfo(NULL) {} 

    Info(Info<typename T> *info) : 
     parentInfo(info) 
    { 
    } 

    private: 
     Info<typename T> *parentInfo; 
}; 

int _tmain(int, _TCHAR**) 
{ 
    Info<int> parent; 
    Info<int> child(&parent); 
}