2011-10-19 50 views
0

所以我有一個類在其私有變量內部保存了一個結構,並且在這個結構中我有一個數組的大小隻有在類的構造之後才確定。構建一個類裏面有一個struct C++

template <typename T> 
class btree { 

    public: 
    btree(size_t maxNodeElems); 
    ~btree() {} 

    private: 
    // The details of your implementation go here 
    size_t maxNodeElems; 
    struct node { 

     list <T> elements; 
     node lvl[]; 

    }; 

}; 

首先,我必須讓它所以其node * lvl,我如何把這個結構體中的變量?它是否與私有變量相同,因此無論何時我在btree class的某個函數內使用它,我都可以將它稱爲btree.lvl或者它是btree->node->lvl或者是否有特殊的方法來執行此操作?

此外,我的陣列必須是maxNodeElems+1如果有人可以幫助我,那將非常感激!

回答

3

你只是聲明瞭類型,而不是該類型的實際對象。你需要讓你的結構聲明的公共和對象私有:

template <typename T> 
class btree { 

    public: 
    btree(size_t maxNodeElems); 
    ~btree() {} 

    struct node { // <- this is just a declaration of a private inner-class 
     list <T> elements; 
     node lvl[]; 
    }; 

    private: 
    size_t maxNodeElems; 
    node* memberNode; // <- this is the actual private member 

}; 

您可以從外部創建該類型的對象:

btree<A>::node* n = new btree<A>::node; 

爲了訪問成員,你可以有公共的getter & setter方法你B樹類:

class btree { 
public: 
    node* getNode() 
    { 
     return memberNode; 
    } 
    //........... 
    //........... 
}; 

編輯:

對我來說,以下工作(初始化部件):

template <typename T> 
class btree { 

    public: 
    btree() 
    { 
     memberNode = new btree<T>::node; 
    } 
    ~btree() {} 

    void init() 
    { 
     memberNode->lvl = new node[10]; 
    } 

    struct node { // <- this is just a declaration of a private inner-class 
     list <T> elements; 
     node* lvl; 
    }; 

    private: 
    size_t maxNodeElems; 
    node* memberNode; // <- this is the actual private member 

}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    btree<char> b; 
    b.init(); 
} 
+0

所以將這意味着,我可以做'N-> LVL =新節點[maxNodeElems + 1];'如果我改變'節點LVL []'到'node * lvl'? – SNpn

+0

是的。你可以直接在類內部完成這個操作(我將它命名爲我的變量memberNode)。結構成員默認是公共的,所以這應該工作。 –

+0

當我嘗試'memberNode = new btree :: node;'主要是'btree.tem:8:錯誤:無法在作業中將'int *'轉換爲'btree :: node *' – SNpn

相關問題