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.
相关文章
Arduino 复位
发布时间:2024/03/13 浏览次数:315 分类:C++
-
可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。
Arduino 的字符转换为整型
发布时间:2024/03/13 浏览次数:181 分类:C++
-
可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。
Arduino 串口打印多个变量
发布时间:2024/03/13 浏览次数:381 分类:C++
-
可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。