C++ const "并且对象具有与成员不兼容的类型限定符

C++ const "and the object has type qualifiers that are not compatible with the member

我是 C++ 编程的新手,在我的 OPP class 中,我们被要求创建一本 phone 书。

现在,在讲座中,教授谈到了这一点,如果你想确保注入到方法中的变量不被更改,你必须将 const 放在它上面。

到目前为止,这是我的代码。

private:
 static int phoneCount;
 char* name;
 char* family;
 int phone;
 Phone* nextPhone;

public:
    int compare(const Phone&other) const;
    const char* getFamily();
    const char* getName();

并在 Phone.cpp

int Phone::compare(const Phone & other) const
{
 int result = 0;
 result = strcmp(this->family, other.getFamily());
 if (result == 0) {
    result = strcmp(this->name, other.getName);
 }
 return 0;
}

我不断收到 "the object has type qualifiers that are not compatible with the member" 当我尝试在我的比较函数中调用 strcmp 时。 我知道我可以删除函数声明中的 const 它就会消失,但我仍然不明白为什么它首先显示。

将不胜感激。

您需要为 getters const char* getFamily() const; 添加 const 限定符。通过这种方式,可以在您传递给函数的 const Phone & 类型的对象上调用这些 getter。

另外 other.getName 应该是 other.getName()

您的签名

int Phone::compare(const Phone & other) const

表示在该函数中您需要确保不更改 Phone 实例。

目前,您的函数调用 const char* getFamily()(和 getName,您错过了 () 的调用)。这些函数都不是 const,因此出现错误。

如果你也将它们标记为常量,就可以了。

除了正确建议 const 限定您的 getter 的其他答案之外,您还可以直接访问 other 的数据成员,避免这些调用。

int Phone::compare(const Phone & other) const
{
 int result = strcmp(family, other.family);
 if (result == 0) {
    result = strcmp(name, other.name);
 }
 return result;
}