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

时间:2018-11-08 11:17:47

标签: c++ const strcmp

我不熟悉C ++编程,在我的OPP课上,我们被要求创建电话簿。

现在,教授在讲座中说了一些关于如果您要确保注入到方法中的变量不会被更改的情况,您必须在其上加上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;
}

我不断收到“对象具有与成员不兼容的类型限定符”  当我尝试在我的compare函数中调用strcmp时。 我知道我只需要在函数声明中删除const,它就会消失,但我仍然不明白为什么它首先显示。

我们将不胜感激。

3 个答案:

答案 0 :(得分:6)

您需要为吸气剂const添加const char* getFamily() const;限定词。这样,可以在传递给函数的const Phone &类型的对象上调用这些getter。

other.getName应该是other.getName()

答案 1 :(得分:2)

除了可以正确提示const符合条件的其他答案之外,您还可以直接访问other的数据成员,从而避免了这些调用。

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

答案 2 :(得分:1)

您的签名

a2 = np.array([1,2,3,4])
a1 = np.array([10,20,30,40])
a0 = np.array([8,8,8,8]) 

a2 = a1
a1 = a0.copy()

# let's change a0
a0[0] = 9

# check
a0
Out[31]: array([9, 8, 8, 8])

a1
Out[32]: array([8, 8, 8, 8])

a2
Out[33]: array([10, 20, 30, 40])

意味着您需要确保不更改int Phone::compare(const Phone & other) const 实例的功能。

此刻,您的函数调用了Phone(和const char* getFamily(),您错过了getName的调用)。这些功能都不是(),因此会出错。

如果您也将它们标记为const,就可以了。