所以我正在上一个计算机科学课,我们必须构建一个二进制表达式树,这是我到目前为止所拥有的:
void buildtree(string str)
{
string tmp;
stack<char> opstack;
stack<BTNP> treeStack;
double value;
int i = 0;
while(i < str.length)
{
while(isspace(str[i++]))
{
if(str[i] == '(')
{
opstack.push(str[i]);
}
else if(isdigit(str[i] || str[i] == '*'))
{
tmp.clear();
while(isdigit(str[i]) || str[i] == '+')
{
tmp =+ str[i++];
}
}
}
}
BTNP ptr= new BTN;
ptr->flag = false;
ptr->value = value;
ptr->left = NULL;
ptr->right = NULL;
treeStack.push(ptr);
}
这是我构建树的功能。我的教授已经把它写在了电路板上,我们不得不对它进行一些编辑,但我不断收到BTNP部分的错误。
stack<BTNP> treestack;
我一直在寻找一个示例代码来查看如何构建表达式树,但什么都没有出现。即使我没有得到回复,链接也会很好。
我的错误:
BTNP is not identified.
while(i < str.length())
会收到3个不同的错误,例如:
Error 3 error C2297: '<' : illegal, right operand has type 'unsigned int (__thiscall std::basic_string<_Elem,_Traits,_Alloc>::* )(void) throw() const'
Error 2 error C2446: '<' : no conversion from 'unsigned int (__thiscall std::basic_string<_Elem,_Traits,_Alloc>::* )(void) throw() const' to 'int'
Error 1 error C3867: 'std::basic_string<_Elem,_Traits,_Alloc>::length': function call missing argument list; use '&std::basic_string<_Elem,_Traits,_Alloc>::length' to create a pointer to member
4 IntelliSense: no instance of overloaded function "std::stack<_Ty, _Container>::push [with _Ty=BET::BTN, _Container=std::deque<BET::BTN, std::allocator<BET::BTN>>]" matches the argument list
argument types are: (BET::BTN *)
object type is: std::stack<BET::BTN, std::deque<BET::BTN, s
我得到的最后一个错误是使用treeStack.push(ptr);
3 IntelliSense:没有重载函数的实例“std :: stack&lt; _Ty,_Container&gt; :: push [with _Ty = BET :: BTN,_Container = std :: deque&gt;]”匹配参数列表 参数类型是:(BET :: BTN *) 对象类型是:std :: stack&gt;&gt;
错误2错误C2664:'void std :: stack&lt; _Ty&gt; :: push(BET :: BTN&amp;&amp;)':无法将参数1从'BET :: BTN *'转换为'BET :: BTN &安培;&安培;'
树的代码,或者我认为有点相关......
struct BTN
{
bool flag;
char op;
double value;
BTN * left;
BTN * right;
BTN * BTNP;
};
答案 0 :(得分:0)
// ...snip
int i = 0;
while(i < str.length)
{
// etc...
假设此代码已复制并粘贴到问题中,您在str.length
之后错过了括号(尽管您之后已在评论中包含它们)。
因此该函数实际上没有被调用,并且编译器正在抱怨(非常正确)它不知道如何告诉你成员函数是否大于int
。
将代码更改为str.length()
,它可以帮助您进一步: - )