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

not familiar with c++ pointer, need help

本文关键字:帮助 c++ 指针 不熟悉      更新时间:2023-10-16

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

您有一个小的优先级问题。以下任意一个都可以解决这个问题:

(*binSon[0]).add(x);

binSon[0]->add(x);

另一行也一样

你的问题并不完全像你想的那样,尽管它可以这样解决。

正确的语法是:

binSon[0]->add(x);

->操作符是指针成员,它为您处理所有事情。通常,->应该与指针一起使用,.应该与引用或对象本身一起使用(例外情况在有趣的地方)。

要按你想要的方式做(你真的不应该这样做),(*binSon[0]).add(x)应该工作。操作符的优先级可能是您目前的问题。

也许你想要(*binSon[0]).add或更好的binSon[0]->add

在c++中,.具有比*更高的优先级,因此当您编写*binSon[1].add(x)时,它意味着*(binSon[1].add(x)),这不是您想要的。您可以编写(*binSon[1]).add(x),或者更好的binSon[1]->add(x),这是语法糖。