2011-10-19 3 views
0

그래서 private 변수 내부에 구조체를 가지고 있고이 구조체 내부에는 배열의 크기가 클래스의 생성 후에 결정되는 배열이 있습니다. 첫째내부에 구조체를 가진 클래스를 생성하는 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; 

에 공용 게터에게 & 세터를 가질 수 있습니다 BTREE 클래스 :

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로 이름을 지정했습니다). 구조체 멤버는 기본적으로 public이므로 this가 작동해야합니다. –

+0

'memberNode = new btree를 시도 할 때 많은 에러가 발생 함 :: node;'주로 'btree.tem : 8 : 오류 :'int * '를'012t:: node * '에서'int * '로 변환 할 수 없음' – SNpn

관련 문제