*binSon[0].add(x);
上的,它给我一个错误,一个表达式必须有一个类类型,我该怎么办?
struct Rectangle
{
tName Name; //name of the rectangle
struct Rectangle *binSon[NDIR_1D]; //left and right son
int Center[NDIR_1D];
int Length[NDIR_1D];
void add(Rectangle x){
if(strcmp(x.Name,Name)<0)
{
if(binSon[0]==NULL)
binSon[0]=&x;
else
*binSon[0].add(x);
}else{
if(binSon[1]==NULL)
binSon[1]=&x;
else
*binSon[1].add(x);
}
}
};
答案 0 :(得分:5)
您有一个小优先级问题。以下任一情况都应解决问题:
(*binSon[0]).add(x);
或
binSon[0]->add(x);
同样适用于另一条线。
答案 1 :(得分:2)
也许您想要(*binSon[0]).add
或更好binSon[0]->add
。
答案 2 :(得分:2)
在C ++中,.
的优先级高于*
,因此当您编写*binSon[1].add(x)
时,它意味着*(binSon[1].add(x))
,这不是您想要的。你可以写(*binSon[1]).add(x)
,或者更好,binSon[1]->add(x)
,这是它的语法糖。
答案 3 :(得分:2)
你的问题确实不是你想的那么,虽然可以按原样解决。
正确的语法是:
binSon[0]->add(x);
->
运算符是指针成员,它为您处理所有事情。通常,->
应该与指针一起使用,.
应该与引用或对象本身一起使用(例外情况在有趣的地方)。
要按照你想要的方式(你真的不应该这样做),(*binSon[0]).add(x)
应该有效。目前,运营商的优先权可能是您的问题。