2013-04-15 101 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); 
}