我必须构建一个表达式树,我正如下所示。我有一个树,其根目录为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]
请帮忙!
答案 0 :(得分:0)
TreeNode<T>::getInfo
的签名会返回T
,这是一个临时的。您不想尝试分配给它,因为这不起作用。
相反,请致电TreeNode<T>::setInfo
将您的潜在Token
替换为您想要的那个。