C++ 错误 Error: Cannot Call Member Function Without Object
本文介绍了使用C++进行面向对象编程时,常见的错误“无法调用没有对象的成员函数”。 此外,它还提供了对该错误的潜在修复。
修复C++中 Error: Cannot Call Member Function Without Object 错误
在进行面向对象编程时,C++ 中经常出现一个常见错误,即无法在没有对象的情况下调用成员函数。 出现此错误的原因是您在没有实例化该类的情况下调用了该类的某些成员方法。
每个类都有一组数据成员和一些成员函数。 我们需要创建类对象来访问成员方法或函数,然后使用该对象调用/访问方法。
考虑以下代码。
#include<iostream>
using namespace std;
class Rectangle{
private:
int length=5;
int width=8;
public:
double getArea()
{
return length*width;
}
};
int main()
{
cout<<"Area: "<<Rectangle::getArea()<<endl;
}
此代码将生成以下输出。
上面代码片段中的第 16 行尝试使用类名调用 getArea()
方法。 类的所有非静态成员只能通过该类的对象来访问; 因此,该行会产生错误。
使用类的实例来访问成员函数
该错误可以通过使用类的对象调用函数/方法来解决,如下所示:
int main()
{
Rectangle r;
cout<<"Area: "<<r.getArea()<<endl;
}
这将给出正确的输出。
Area: 40
使用静态成员函数
静态成员函数是类的函数,不需要对象来调用它们。 可以使用范围解析运算符 :: 通过类名直接调用它们。
使用静态成员函数时必须牢记某些限制。 静态成员函数只能访问类的静态数据成员,并且只能调用其他静态成员函数。
让我们看下面的例子,讨论 cannot call member function without object 错误的解决方案。
#include <iostream>
using namespace std;
class Rectangle{
private:
int length =5;
int width=8;
public:
double getArea()
{
return length*width;
}
static void getShapeName()
{
cout<<"Hello, I am a Rectangle."<<endl;
}
};
int main()
{
Rectangle r ;
cout<<"Area: "<<r.getArea()<<endl;
Rectangle::getShapeName();
}
这将给出以下输出。
Area: 40
Hello, I am a Rectangle.
相关文章
C++ std::bad_alloc 异常
发布时间:2023/08/22 浏览次数:117 分类:C++
-
这篇短文讨论了 C++ 中 std::bad_alloc() 异常的主要原因。 它还讨论了使用 C++ 异常处理顺利处理此运行时异常的方法。C++ 中的异常处理
C++ 中的 NULL 未声明错误
发布时间:2023/08/22 浏览次数:157 分类:C++
-
本文将讨论C++中NULL关键字以及未声明NULL的错误。C+ 中的 NULL 关键字 NULL是C++中的常量,用于将指针变量初始化为0。NULL和0可以互换使用。
跳转到 switch 语句中的 Case 标签
发布时间:2023/08/22 浏览次数:103 分类:C++
-
本文将讨论 C++ 中 switch 语句的使用。 此外,还将讨论使用 switch 语句时可能出现的错误,包括跳转到 case 标签错误。C++ 中的 switch 语句
解决C++ 中 - 'Python.h': No such file or directory 错误
发布时间:2023/08/22 浏览次数:117 分类:C++
-
本文将解释如何解决错误“Python.h”:没有这样的文件或目录。 当我们尝试在 C++ 中嵌入 Python 代码,但编译器无法在系统内部找到对 Python 的引用时,通常会发生这种情况。C++ 中 'Python.h': No
C++ 中公共继承、私有继承和受保护继承之间的区别
发布时间:2023/08/22 浏览次数:88 分类:C++
-
在本文中,我们将讨论以下三种类型的继承:Public 继承 Private 继承 Protected 继承 但是,在讨论继承类型之前,我们将讨论 C++ 中基类和派生类的概念。
C++ 调用基类方法
发布时间:2023/08/22 浏览次数:118 分类:C++
-
本文将讨论使用 C++ 从子类调用父类方法。 首先,我们将快速刷新继承。稍后我们将讨论不同场景下调用基类方法以及相关问题。
检查C++中的链表是否为空
发布时间:2023/08/22 浏览次数:127 分类:C++
-
链表具有多个动态分配的节点,其中包含一个值和一个指针。 本教程将教您三种在 C++ 中检查链表是否为空的方法。C++ 中使用根元素检查链表是否为空 链表中的根充当一个元素,即使链表为空
C++ 中的移动语义
发布时间:2023/08/22 浏览次数:160 分类:C++
-
在本文中,我们将讨论 C++ 中的移动语义:我们将讨论深拷贝和浅拷贝的相关概念 我们将快速讨论左值和右值的概念。 我们将尝试通过示例来理解移动语义。