我想为一个类的每个实例创建一个唯一的ID,该ID无法修改。
然后我想创建一个运算符==,如果p1和p2具有相同的ID,即元素相同,则p1==p2返回true
我打算这样做的方式是:

parent.hpp

class parent{
    public:
        ...
        int parent::GetUid() const;

    private:
        static int newUID;
        const int uid;

}


parent.cpp

bool operator ==(const parent p1, const parent p2)
{
    return (p1.GetUid()== p2.GetUid());
}

parent::parent()
:uid(newUID++){}


int parent::newUID=0;

int parent::GetUid() const
    {
        return uid;
    }


但是,尽管我确实初始化了newUID,但出现以下错误:


  错误c2789,必须初始化const限定类型的对象


编辑:以上错误已解决并由于我做错字而发生。

现在,当我尝试使用运算符时,出现以下错误:


  错误C2676:二进制'==':'父级'未定义此运算符或未转换为预定义运算符可接受的类型


执行以下操作时出现此错误:

parent p1;
parent p2;
...
if(p1==p2){
    t=0;
}

最佳答案

如果编写parent::parent() :uid(newUID++){},则至少应编译。但是请注意,您必须做更多的工作才能以这种方式解决“身份”的问题。首先,newUID++不是线程安全的,因此您可以创建具有相同“身份”的不同对象。然后,您必须提供一个复制构造函数,除非您希望允许内存中的不同对象表示相同的“标识”。

关于c++ - 创建一个可以访问类实例的唯一ID的运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48105586/

10-11 22:55
查看更多