Typechecking保护标记的联合

时间:2015-11-17 12:07:05

标签: c++

我必须构建一个表达式树,我正如下所示。我有一个树,其根目录为TreeNode<Token>*,其中Token和TreeNode如下所示:

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 个答案:

答案 0 :(得分:0)

TreeNode<T>::getInfo的签名会返回T,这是一个临时的。您不想尝试分配给它,因为这不起作用。

相反,请致电TreeNode<T>::setInfo将您的潜在Token替换为您想要的那个。

相关问题