2017-03-19 11 views
-1

プログラムを作成してツリーを実装し、このツリーを横に横断します。プログラムは3つのファイルが含ま:queue.h、tree.hとmain.cppには...これはqueue.hエラーt C2679 tバイナリ '=':タイプ 'int'の右オペランドを取る演算子が見つかりません(または許容される変換はありません)

#pragma once 
#include <iostream> 

template <class T> 
struct L1node { 
    T data; 
    L1node* next = NULL; 
}; 

template <class T> 
class L1queue 
{ 
    L1node<T>* pHead, pTail; 
public: 
    L1queue() :pHead(NULL), pTail(NULL) {} 
    ~L1queue() { 
     if (pHead) { 
      while (pHead->next) { 
       L1node<T>* p = pHead; 
       pHead = pHead->next; 
       delete p; 
      } 
      delete pHead; 
     } 
     return 0; 
    } 
    bool isEmpty() { 
     return pHead == NULL: 
    } 
    T& head() { 
     if (isEmpty()) throw - 1; 
     return pHead->data; 
    } 
    void enqueue(T& a) { 
     L1node<T> p = new L1node<T>(a); 
     if (isEmpty()) { 
      pHead = pTail = p; 
     } 
     else { 
      pTail->next = p; 
      pTail = p; 
     } 
    } 
    void dequeue() { 
     if (isEmpty()) return; 
     L1node<T>* p = pHead; 
     pHead = pHead->next; 
     delete p; 
     if (pHead == NULL) pTail = NULL; //Error here 
    } 
}; 

であり、これは私がデキューでエラーを満たしtree.h

#include <iostream> 
#include "queue.h" 
using namespace std; 

class treeNode { 
public: 
    int data; 
    treeNode* left = NULL; 
    treeNode* right = NULL; 
}; 
void printLeavesBFT(treeNode* root) { 
    L1queue<treeNode*> q; 
    while (!q.isEmpty()) { 
     treeNode* p = q.head(); cout << p->data << " "; 
     q.dequeue(); 
     if(p->left) q.enqueue(root->left); 
     if(p->right) q.enqueue(root->right); 
    } 
} 

です関数。私はその理由を知らない。手伝って頂けますか!

答えて

2

pTailは、L1node<T>*と宣言している間にL1node<T>と宣言されています。その後、pTail = NULLは意味をなさない。

L1node<T>* pHead, pTail;と書くときは、pHeadだけがポインタです。pTailがオブジェクトです。

L1node<T> *pHead, *pTail; 

かによって置き換え:

L1node<T>* pHead; 
L1node<T>* pTail; 
+0

はありがとうございました。私は自分の習慣を変えなければならない – Akkien

関連する問題

 関連する問題