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]
請幫幫我!
'getInfo'返回一個臨時的,所以分配給它的'.number'不是你想要的。你需要調用'setInfo()'並傳遞一個新的'Token' – AndyG
@AndyG完美!如果你發佈這個答案,我會接受它 –