template <typename T>
class BST
{
private:
class TreeNode
{
public:
T data;
TreeNode *left;
TreeNode *right;
TreeNode(const T & d, TreeNode *lchld = NULL, TreeNode *rchld = NULL):
data(d), left(lchld), right(rchld) {}
};
TreeNode *root;
vector<list<TreeNode *> *> createLevelLinkedList(TreeNode *root);
public:
};
template <typename T>
vector< list< typename BST<T>::TreeNode *> *> BST<T>::createLevelLinkedList(TreeNode *root)
{
vector<list<BST<T>::TreeNode *> *> result;
if (root == NULL) return result;
list<TreeNode *> *treeNodeList = new list<TreeNode *>();
int level = 0;
treeNodeList->push_back(root);
result[0] = treeNodeList;
while(true) {
treeNodeList = new list<TreeNode *>();
list<TreeNode *>::iterator itr;
for(itr = (result[level])->begin(); itr != (result[level])->end(); itr++)
{
TreeNode *temp = *itr;
if(temp != NULL)
{
if(temp->right != NULL) treeNodeList->push_back(temp->right);
if(temp->left != NULL) treeNodeList->push_back(temp->left);
}
}
if(treeNodeList->size() > 0)
{
result[level++] = treeNodeList;
} else {
break;
}
}
return result;
}
내가 코드의 다음 줄에 위의 코드를하지만 점점 컴파일 오류를 컴파일하려고 :오류 동안
여러 마커 :
list<TreeNode *>::iterator itr;
오류는 다음과 같은 말 이 줄에서 - 'std :: list :: TreeNode *> :: iterator'전에 'typename'이 필요합니다. 'std :: list :: TreeNode *>'가 종속 범위이므로 - 예상 ';' before 'itr'
나는 다양한 옵션을 시도했지만 아무 것도 작동하지 않는 것 같습니다. 템플릿 기반이 아닌 코드를 컴파일하면 작동하지만이 템플릿 기반 코드를 컴파일하려고합니다. 누군가가 나를 찾아 문제를 발견하고 해결 방법을 제안 할 수 있습니까?
감사합니다. 나는 아직도 설명이 명확하지는 않지만 일을한다. 이 링크를 더 자세히 읽을 수있는 링크가 있습니까? – user489703
@ user489703 [이 참조] (http://en.cppreference.com/w/cpp/language/dependent_name)를 사용해보십시오. – Barry