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;
}
我是 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;
}