不熟悉c ++指针,需要帮助

时间:2011-09-23 02:07:46

标签: c++ pointers

在行*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);
        }
    }
};

4 个答案:

答案 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)应该有效。目前,运营商的优先权可能是您的问题。