c++ 类函数在另一个函数中无法按预期工作

用户16320

为了演示我的问题,让我们看一下以下示例:

#include "stdafx.h"
#include <iostream>

using namespace std;

class MyClass {
public:
    long double x, y;
    MyClass(const long double &xx = 0, const long double &yy = 0);
    long double distance(const MyClass &b) {
        return sqrt((x - b.x)*(x - b.x) + (y - b.y)*(y - b.y));
    }
};

MyClass::MyClass(const long double &xx, const long double &yy) {
    x = xx; y = yy;
}

void WriteDistance(const MyClass &a, const MyClass &b) {
    cout << a.distance(b) << endl;
}

int main()
{
    MyClass a = MyClass(2., 3.);
    MyClass b = MyClass(3., 4.);
    cout << a.distance(b) << endl;
    return 0;
}

有一个类,MyClass并且有一个类函数 distance ,它接受一个MyClass变量并返回现有点和参数点之间的距离。

问题是:在 main() 中,该函数有效(没有错误)。但是,WriteDistance() 函数中存在错误,内容为:the object has type qualifiers that are not compatible with the member function "MyClass::distance"'long double MyClass::distance(const MyClass &)': cannot convert 'this' pointer from 'const MyClass' to 'MyClass &'

如果我重载距离函数(不仅要获取一个 MyClass 对象,还可以获取两个长双精度值,只是为了方便使用),错误将显示为:no instance of overloaded function "MyClass::distance" matches the argument list and object (the object has type qualifiers that prevent a match)'MyClass::distance': 2 overloads have no legal conversion for 'this' pointer

问题是:为什么会发生此错误以及如何预防?我发现不制作MyClass &a const(所以删除“ const”)可以消除错误。但为什么?该站点的成员无数次告诉我,始终通过const引用传递以防止对象的复制。如果我不能通过const引用传递,这是否意味着我的函数WriteDistance在此过程中以某种方式更改了 a 对象?是否有一些解决方法能够真正拥有它const

三聚氰胺

您的distance函数声称要修改调用它的对象,这就是您不能在 type 值上使用它的原因const MyClass

你应该把它声明为

long double distance(const MyClass &b) const {
//                                     ^^^^^

该第二const装置将不会修改类成员(即*thisconst在函数内)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++-从另一个类构造函数调用一个类构造函数

稍后在 C++ 中的另一个类方法中调用类构造函数

C ++使用另一个类的函数

在 C# 中从另一个类调用主窗体中的函数

当我来自C中的另一个函数时,无需memset即可工作

从 C#/.NET MVC 应用程序中的另一个类调用函数

在C ++中,如何与另一个类的静态函数成为朋友

从私有void函数c#中的另一个类访问变量

在另一个类中调用成员函数c ++

另一个Form类中的C#访问函数

C ++中带有另一个模板类作为参数的构造函数

C ++从文件阅读器中的另一个类调用集合函数

C++ 新手:无法从继承自另一个类的类设置类构造函数

在C中另一个函数的输入中定义一个函数

我如何从C ++中的另一个函数循环一个函数

在 C 中将一个函数调用到另一个函数中

我可以从 C# 中另一个类的构造函数调用构造函数吗?

C ++在另一个函数内调用类函数

在一个类中使用一个函数来更改另一个类中的变量的值C ++

无法从Visual Studio C ++中的另一个类访问一个类

如何独立于 C++ 中声明的位置在另一个类函数中使用类?

如何在c ++中将一个函数的数据成员访问到同一类中的另一个函数

C ++退出另一个函数的函数

另一个函数内部的C ++调用函数

从另一个函数C#调用另一个函数

C ++试图将类传递给另一个类的构造函数

C#如何在一个函数中创建类的实例,然后在另一个函数中使用相同的实例

在 C 中的另一个函数中填充指向函数的指针数组

了解在另一个C中调用一个函数