2015-11-17 70 views
1

我必須構建一個表達樹,並按照以下方法進行操作。我有一個具有TreeNode<Token>*類型的根樹,其中令牌和樹節點如下:Typechecking受保護的標記聯盟

struct Token { 
    enum{ 
     PLUS, MINUS, NUMBER, VARIABLE, SIN, COS, POW, PRODUCT, DIVIDE, PI 
    } type; 

    union{ 

     char variable; 
     double number; 

    };//union 

}; 

template <class T> 
class TreeNode{ 

    public: 

     TreeNode(); 
     ~TreeNode(); 
     TreeNode<T>* getLeft() const; 
     TreeNode<T>* getRight() const; 
     void setLeft(TreeNode<T>* node); 
     void setRight(TreeNode<T>* node); 
     void setInfo(T value); 
     T getInfo() const; 

    protected: 
     T info; 
     TreeNode<T> *left; 
     TreeNode<T> *right; 

}; 

我的問題是,我不知道,因爲信息是受保護的訪問令牌的類型。我曾嘗試類似

root->getInfo().number = cos(root->getRight()->getInfo().number); 

(這裏我知道root具有具有正確的類型等所以這應該是好的右子),但是這讓我以下錯誤:

error: using temporary as lvalue [-fpermissive] 

請幫幫我!

+1

'getInfo'返回一個臨時的,所以分配給它的'.number'不是你想要的。你需要調用'setInfo()'並傳遞一個新的'Token' – AndyG

+0

@AndyG完美!如果你發佈這個答案,我會接受它 –

回答

0

TreeNode<T>::getInfo的簽名返回T這是一個臨時的。您不想嘗試分配給它,因爲這將不起作用。

取而代之,請致電TreeNode<T>::setInfo將您的潛在Token替換爲您所需的。